Java的多线程-线程间的通信(2)
来源:互联网 发布:67端口 编辑:程序博客网 时间:2024/06/12 01:21
1) sleep ()函数有一个参数,通过参数可使线程在指定的时间内进入停滞状态,当指定的时间过后,线程则自动进入可执行状态。
2) 当调用sleep ()函数后,线程不会释放它的“锁标志”。
例12:
class TestThreadMethod extends Thread{
class TestThreadMethod extends Thread{
public static int shareVar = 0;
public TestThreadMethod(String name){
super(name);
}
public synchronized void run(){
for(int i=0; i<3; i++){
System.out.print(Thread.currentThread().getName());
System.out.println(" : " + i);
try{
Thread.sleep(100); //(4)
}
catch(InterruptedException e){
System.out.println("Interrupted");
}}}
}
public class TestThread{public static void main(String[] args){
TestThreadMethod t1 = new TestThreadMethod("t1");
TestThreadMethod t2 = new TestThreadMethod("t2");
t1.start(); (1)
t1.start(); (2)
//t2.start(); (3)
}}
运行结果为:
t1 : 0
t1 : 1
t1 : 2
t1 : 0
t1 : 1
t1 : 2
由结果可证明,虽然在run()中执行了sleep(),但是它不会释放对象的“锁标志”,所以除非代码(1)的线程执行完run()函数并释放对象的“锁标志”,否则代码(2)的线程永远不会执行。
如果把代码(2)注释掉,并去掉代码(3)的注释,结果将变为:
t1 : 0
t2 : 0
t1 : 1
t2 : 1
t1 : 2
t2 : 2
由于t1和t2是两个对象的线程,所以当线程t1通过sleep()进入停滞时,排程器会从线程池中调用其它的可执行线程,从而t2线程被启动。
例13:
class TestThreadMethod extends Thread{
public static int shareVar = 0;
public TestThreadMethod(String name){
super(name);
}
public synchronized void run(){
for(int i=0; i<5; i++){
System.out.print(Thread.currentThread().getName());
System.out.println(" : " + i);
try{
if(Thread.currentThread().getName().equals("t1"))
Thread.sleep(200);
else
Thread.sleep(100);
}
catch(InterruptedException e){
System.out.println("Interrupted");
}}
}}
public class TestThread{public static void main(String[] args){
TestThreadMethod t1 = new TestThreadMethod("t1");
TestThreadMethod t2 = new TestThreadMethod("t2");
t1.start();
//t1.start();
t2.start();
}}
运行结果为:
t1 : 0
t2 : 0
t2 : 1
t1 : 1
t2 : 2
t2 : 3
t1 : 2
t2 : 4
t1 : 3
t1 : 4
由于线程t1调用了sleep(200),而线程t2调用了sleep(100),所以线程t2处于停滞状态的时间是线程t1的一半,从从结果反映出来的就是线程t2打印两倍次线程t1才打印一次。
- Java的多线程-线程间的通信
- 【Java多线程】线程间的通信
- Java多线程-线程间的通信
- Java的多线程-线程间的通信(2)
- 【多线程】线程间的通信
- 多线程-线程间的通信
- Java的多线程-线程间的通信(1)
- Java的多线程-线程间的通信(3)
- Java的多线程-线程间的通信(4)
- Java的多线程-线程间的通信(5)
- 彻底明白Java的多线程-线程间的通信
- 彻底明白Java的多线程-线程间的通信
- 彻底明白Java的多线程-线程间的通信
- 【转】彻底明白Java的多线程-线程间的通信
- 彻底明白Java的多线程-线程间的通信
- 彻底明白Java的多线程-线程间的通信
- 彻底明白Java的多线程-线程间的通信
- 彻底明白Java的多线程-线程间的通信
- TCP连接的三次握手
- .net加密读书笔记
- 一些关于中文乱码问题的一些解决方案分类
- EL表达式(转贴)
- Java的多线程-线程间的通信(1)
- Java的多线程-线程间的通信(2)
- 单文档视图结构中利用OpenGL绘制图形
- 架构和框架的区别
- Java的多线程-线程间的通信(3)
- Java的多线程-线程间的通信(4)
- Java的多线程-线程间的通信(5)
- 提高ASP.Net应用程序性能的十大方法
- 清华的图形学看了真是让人想撕书2
- 多文档话题跟踪展示技术的有趣实现