博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 多线程简介
阅读量:4035 次
发布时间:2019-05-24

本文共 3764 字,大约阅读时间需要 12 分钟。

             进程是程序在处理机中的一次运行。一个进程既包括其所要执行的指令,也包括了执行指令所需的系统资源,不同进程所占用的系统资源相对独立。所以进程是重量级的任务,它们之间的通信和转换都需要操作系统付出较大的开销。
线程是进程中的一个实体,是被系统独立调度和分派的基本单位。线程自己基本上不拥有系统资源,但它可以与同属一个进程的其他线程共享进程所拥有的全部资源。所以线程是轻量级的任务,它们之间的通信和转换只需要较小的系统开销。
Java支持多线程编程,因此用Java编写的应用程序可以同时执行多个任务。Java的多线程机制使用起来非常方便,用户只需关注程序细节的实现,而不用担心后台的多任务系统。

Java语言里,线程表现为线程类。Thread线程类封装了所有需要的线程操作控制。在设计程序时,必须很清晰地区分开线程对象和运行线程,可以将线程对象看作是运行线程的控制面板。在线程对象里有很多方法来控制一个线程是否运行,睡眠,挂起或停止。线程类是控制线程行为的唯一的手段。一旦一个Java程序启动后,就已经有一个线程在运行。可通过调用Thread.currentThread方法来查看当前运行的是哪一个线程

class ThreadTest{public static void main(String args[]){Thread t = Thread.currentThread();t.setName("单线程"); //对线程取名为"单线程"t.setPriority(8);//设置线程优先级为8,最高为10,最低为1,默认为5System.out.println("The running thread: " + t);// 显示线程信息try{for(int i=0;i<3;i++){System.out.println("Sleep time " + i);Thread.sleep(100); // 睡眠100毫秒}}catch(InterruptedException e){// 捕获异常System.out.println("thread has wrong");}}}
多线程的实现方法
继承Thread类
可通过继承Thread类并重写其中的run()方法来定义线程体以实现线程的具体行为,然后创建该子类的对象以创建线程。

在继承Thread类的子类ThreadSubclassName中重写run()方法来定义线程体的一般格式为: 

public class ThreadSubclassName extends Thread{public ThreadSubclassName(){..... // 编写子类的构造方法,可缺省}public void run(){..... // 编写自己的线程代码}}用定义的线程子类ThreadSubclassName创建线程对象的一般格式为:ThreadSubclassName ThreadObject =new ThreadSubclassName();然后,就可启动该线程对象表示的线程:ThreadObject.start(); //启动线程
应用继承类Thread的方法实现多线程的程序。本程序创建了三个单独的线程,它们分别打印自己的“Hello World!”。
public class ThreadSubclassName extends Thread{public ThreadSubclassName(){..... // 编写子类的构造方法,可缺省}public void run(){..... // 编写自己的线程代码}}用定义的线程子类ThreadSubclassName创建线程对象的一般格式为:ThreadSubclassName ThreadObject =new ThreadSubclassName();然后,就可启动该线程对象表示的线程:ThreadObject.start(); //启动线程应用继承类Thread的方法实现多线程的程序。本程序创建了三个单独的线程,它们分别打印自己的“Hello World!”。class ThreadDemo extends Thread{private String whoami;private int delay;public ThreadDemo(String s,int d){whoami=s;delay=d;}public void run(){try{sleep(delay);}catch(InterruptedException e){ }System.out.println("Hello World!" + whoami+ " " + delay);}}public class MultiThread{public static void main(String args[]){ThreadDemo t1,t2,t3;t1 = new ThreadDemo("Thread1",(int)(Math.random()*2000));t2 = new ThreadDemo("Thread2",(int)(Math.random()*2000));t3 = new ThreadDemo("Thread3",(int)(Math.random()*2000));t1.start();t2.start();t3.start();}}
实现Runnable接口
编写多线程程序的另一种的方法是实现Runnable接口。在一个类中实现Runnable接口(以后称实现Runnable接口的类为Runnable类),并在该类中定义run()方法,然后用带有Runnable参数的Thread类构造方法创建线程。
创建线程对象可用下面的两个步骤来完成:
(1)生成Runnable类ClassName的对象
ClassName RunnableObject = new ClassName();
(2)用带有Runnable参数的Thread类构造方法创建线程对象。新创建的线程的指针将指向Runnable类的实例。用该Runnable类的实例为线程提供 run()方法---线程体。
Thread ThreadObject = new Thread(RunnableObject);
然后,就可启动线程对象ThreadObject表示的线程:
ThreadObject.start();
在Thread类中带有Runnable接口的构造方法有: 

public Thread(Runnable target);public Thread(Runnable target, String name);public Thread(String name);public Thread(ThreadGroup group,Runnable target);public Thread(ThreadGroup group,Runnable target,String name);
其中,参数Runnable target表示该线程执行时运行target的run()方法,String name以指定名字构造线程,ThreadGroup group表示创建线程组。
用Runnable接口实现的多线程。

class TwoThread implements Runnable{TwoThread(){Thread t1 = Thread.currentThread();t1.setName("第一主线程");System.out.println("正在运行的线程: " + t1);Thread t2 = new Thread(this,"第二线程");System.out.println("创建第二线程");t2.start();try{System.out.println("第一线程休眠");Thread.sleep(3000);}catch(InterruptedException e){System.out.println("第一线程有错");}System.out.println("第一线程退出");}public void run(){try{for(int i = 0;i < 5;i++){System.out.println(“第二线程的休眠时间:”+ i);Thread.sleep(1000);}}catch(InterruptedException e){System.out.println("线程有错");}System.out.println("第二线程退出");}public static void main(String args[]){new TwoThread();}}
程序运行结果如下:
正在运行的线程: Thread[第一主线程,5,main
创建第二线程
第一线程休眠
第二线程的休眠时间:0
第二线程的休眠时间:1
第二线程的休眠时间:2
第一线程退出
第二线程的休眠时间:3
第二线程的休眠时间:4
第二线程退出

转载地址:http://rjddi.baihongyu.com/

你可能感兴趣的文章
在Idea中使用Eclipse编译器
查看>>
idea讲web项目部署到tomcat,热部署
查看>>
JMeter 保持sessionId
查看>>
IDEA Properties中文unicode转码问题
查看>>
Idea下安装Lombok插件
查看>>
zookeeper
查看>>
Idea导入的工程看不到src等代码
查看>>
技术栈
查看>>
Jenkins中shell-script执行报错sh: line 2: npm: command not found
查看>>
8.X版本的node打包时,gulp命令报错 require.extensions.hasownproperty
查看>>
Jenkins 启动命令
查看>>
Maven项目版本继承 – 我必须指定父版本?
查看>>
Maven跳过单元测试的两种方式
查看>>
通过C++反射实现C++与任意脚本(lua、js等)的交互(二)
查看>>
利用清华镜像站解决pip超时问题
查看>>
[leetcode BY python]1两数之和
查看>>
微信小程序开发全线记录
查看>>
Centos import torchvision 出现 No module named ‘_lzma‘
查看>>
PTA:一元多项式的加乘运算
查看>>
CCF 分蛋糕
查看>>