java线程技术3_线程的同步
2013-03-01 21:24
295 查看
Thread类中的join方法的功能就是使异步执行的线程变成同步执行。
thread.join()应该是让其它线程进入阻塞状态,等当前的thread执行完之后,才允许其它线程执行 。
例:
/**
* 线程的join举例.
* @version V1.0 ,2011-4-1
* @author xiahui
*/
public class JoinThread extends Thread
{
private int count=0;
public void run(){
while (true){
System.out.println(this.getName()+(++count));
try{
sleep(300);
}catch(InterruptedException ex){
}
if(count == 3)
return;
}
}
public static void main(String[] args) throws Exception
{
JoinThread counter1= new JoinThread();
JoinThread counter2 = new JoinThread();
JoinThread counter3 = new JoinThread();
counter1.setName("counter1_");
counter2.setName("counter2_");
counter3.setName("counter3_");
counter1.start();
counter2.start();
counter3.start();
}
}
输出结果
counter1_1
counter3_1
counter2_1
counter1_2
counter3_2
counter2_2
counter1_3
counter2_3
counter3_3
从结果可以看出,三个线程是异步执行的,输出的次序是无序的
现在要求三个线程依次执行
counter1.start();
counter1.join(); //等待counter1结束,其它线程才能执行
counter2.start();
counter2.join();//等待counter2结束,其它线程才能执行
counter3.start();
输出结果
counter1_1
counter1_2
counter1_3
counter2_1
counter2_2
counter2_3
counter3_1
counter3_2
counter3_3
thread.join()应该是让其它线程进入阻塞状态,等当前的thread执行完之后,才允许其它线程执行 。
例:
/**
* 线程的join举例.
* @version V1.0 ,2011-4-1
* @author xiahui
*/
public class JoinThread extends Thread
{
private int count=0;
public void run(){
while (true){
System.out.println(this.getName()+(++count));
try{
sleep(300);
}catch(InterruptedException ex){
}
if(count == 3)
return;
}
}
public static void main(String[] args) throws Exception
{
JoinThread counter1= new JoinThread();
JoinThread counter2 = new JoinThread();
JoinThread counter3 = new JoinThread();
counter1.setName("counter1_");
counter2.setName("counter2_");
counter3.setName("counter3_");
counter1.start();
counter2.start();
counter3.start();
}
}
输出结果
counter1_1
counter3_1
counter2_1
counter1_2
counter3_2
counter2_2
counter1_3
counter2_3
counter3_3
从结果可以看出,三个线程是异步执行的,输出的次序是无序的
现在要求三个线程依次执行
counter1.start();
counter1.join(); //等待counter1结束,其它线程才能执行
counter2.start();
counter2.join();//等待counter2结束,其它线程才能执行
counter3.start();
输出结果
counter1_1
counter1_2
counter1_3
counter2_1
counter2_2
counter2_3
counter3_1
counter3_2
counter3_3
相关文章推荐
- Java并发——线程间通信与同步技术
- Java深度历险(三)——Java线程:基本概念、可见性与同步
- Java面向对象 线程技术 -- 下篇
- Java线程技术简介
- Java线程的同步synchronizated
- Java同步线程
- Java线程同步的方法
- Java线程:线程的同步-同步方法
- 我对java线程同步的理解
- Java线程同步 2
- Java核心技术学习---多线程,锁,同步,条件对象部分应用源码
- 黑马程序员-Java 多线程(二)-线程的同步、死锁、Lock接口
- java线程同步(生产者消费者应用-模拟叫号系统)
- java开发线程篇1:java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?
- java线程同步之再进一步
- Java集合HashSet-ArrayList-HashMap的线程同步控制方法和区别
- java线程同步原理
- 戏说java线程同步和异步
- Java多线程-线程的同步(同步方法)
- Java同步技术(五)