无缺晓得Java的多线程-线程间的通信[Java编程]
本文“无缺晓得Java的多线程-线程间的通信[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
线程间的通信
1. 线程的几种状况
线程有四种状况,任何一个线程必定处于这四种状况中的一种:
1) 产生(New):线程对象已经产生,但还没有被启动,所以无法履行.如通过new产生了一个线程对象后没对它调用start()函数之前.
2) 可履行(Runnable):每个支持多线程的系统都有一个排程器,排程器会从线程池中挑选一个线程并启动它.当一个线程处于可履行状况时,表示它大概正处于线程池中等候排排程器启动它;也大概它已正在履行.如履行了一个线程对象的start()办法后,线程就处于可履行状况,但显而易见的是此时线程不一定正在履行中.
3) 死亡(Dead):当一个线程正常完毕,它便处于死亡状况.如一个线程的run()函数履行完毕后线程就进入死亡状况.
4) 阻滞(Blocked):当一个线程处于阻滞状况时,系统排程器就会忽视它,不对它举行排程.当处于阻滞状况的线程重新回到可履行状况时,它有大概重新履行.如通过对一个线程调用wait()函数后,线程就进入阻滞状况,只有当两次对该线程调用notify或notifyAll后它才能两次回到可履行状况.
2. class Thread下的常用函数函数
2.1 suspend()、resume()
1) 通过suspend()函数,可以使线程进入阻滞状况.通过suspend()使线程进入阻滞状况后,除非收到resume()消息,不然该线程不会变回可履行状况.
2) 当调用suspend()函数后,线程不会释放它的“锁标志”.
例11:
class TestThreadMethod extends Thread{
public static int shareVar = 0;
public TestThreadMethod(String name){
super(name);
}
public synchronized void run(){
if(shareVar==0){
for(int i=0; i<5; i++){
shareVar++;
if(shareVar==5){
this.suspend(); //(1)
}
}
}
else{
System.out.print(Thread.currentThread().getName());
System.out.println(" shareVar = " + shareVar);
this.resume(); //(2)
}
}
}
public class TestThread{
public static void main(String[] args){
TestThreadMethod t1 = new TestThreadMethod("t1");
TestThreadMethod t2 = new TestThreadMethod("t2");
t1.start(); //(5)
//t1.start(); //(3)
t2.start(); //(4)
}
}
以上是“无缺晓得Java的多线程-线程间的通信[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |