本文为原创,如需转载,请注明作者和出处,谢谢!
上一篇:
Java多线程初学者指南(4):线程的生命周期在上面的例子中多次使用到了Thread
类的join
方法。我想大家可能已经猜出来join
方法的功能是什么了。对,join
方法的功能就是使异步执行的线程变成同步执行。也就是说,当调用线程实例的start
方法后,这个方法会立即返回,如果在调用start
方法后后需要使用一个由这个线程计算得到的值,就必须使用join
方法。如果不使用join
方法,就不能保证当执行到start
方法后面的某条语句时,这个线程一定会执行完。而使用join
方法后,直到这个线程退出,程序才会往下执行。下面的代码演示了join
的用法。
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->packagemythread;
publicclassJoinThreadextendsThread
{
publicstaticintn=0;
staticsynchronizedvoidinc()
{
n++;
}
publicvoidrun()
{
for(inti=0;i<10;i++)
try
{
inc();
sleep(3);//为了使运行结果更随机,延迟3毫秒
}
catch(Exceptione)
{
}
}
publicstaticvoidmain(String[]args)throwsException
{
Threadthreads[]=newThread[100];
for(inti=0;i<threads.length;i++)//建立100个线程
threads[i]=newJoinThread();
for(inti=0;i<threads.length;i++)//运行刚才建立的100个线程
threads[i].start();
if(args.length>0)
for(inti=0;i<threads.length;i++)//100个线程都执行完后继续
threads[i].join();
System.out.println("n="+JoinThread.n);
}
}
在例程2-8中建立了100个线程,每个线程使静态变量n增加10。如果在这100个线程都执行完后输出n,这个n值应该是1000。
1. 测试1
使用如下的命令运行上面程序:
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->java mythread.JoinThread
程序的运行结果如下:
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->n=442
这个运行结果可能在不同的运行环境下有一些差异,但一般n不会等于1000。从上面的结果可以肯定,这100个线程并未都执行完就将n输出了。
2. 测试2
使用如下的命令运行上面的代码:
在上面的命令行中有一个参数join,其实在命令行中可以使用任何参数,只要有一个参数就可以,这里使用join,只是为了表明要使用join方法使这100个线程同步执行。
程序的运行结果如下:
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->n=1000
无论在什么样的运行环境下运行上面的命令,都会得到相同的结果:n=1000。这充分说明了这100个线程肯定是都执行完了,因此,n一定会等于1000。
下一篇:Java多线程初学者指南(6):慎重使用volatile关键字
国内最棒的Google Android技术社区(eoeandroid),欢迎访问!《银河系列原创教程》发布《Java Web开发速学宝典》出版,欢迎定购
分享到:
相关推荐
Java多线程初学者指南:线程的生命周期.pdf
Java多线程初学者指南(7):向线程传递数据的三种方法.docx )
Java多线程初学者指南,共12篇文档,由浅入深,举例说明,包括一些疑点都解释得很清楚,类,方法,属性同步的区别等细节也都介绍得很全面,是个很好的学习资料。
Java多线程编程实战指南(核心篇) 高清pdf带目录 随着现代处理器的生产工艺从提升处理器主频频率转向多核化,即在一块芯片上集成多个处理器内核(Core),多核处理器(Multicore Processor)离我们越来越近了――如今...
Java 高并发编程相关知识, 接下来将阅读该书, 并且进行比较详细的总结, 好记性不如烂笔头, 加油。 Java 多线程编程实战指南。
详细的讲述了多线程的各种用法 Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠...
Java线程:线程的同步-同步方法 Java线程:线程的同步-同步块 Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 Java线程:新特征-有返回值的...
本书以理论结合示例的方式介绍了多线程常见设计模式。
《Java多线程编程实战指南(核心篇)》以基本概念、原理与方法为主线,辅以丰富的实战案例和生活化实例,并从Java虚拟机、操作系统和硬件多个层次与角度出发,循序渐进、系统地介绍Java平台下的多线程编程核心技术及...
Java多线程编程实战指南-核心篇Java多线程编程实战指南-核心篇
Java 给多线程编程提供了内置的支持。 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。 ...
Java线程:概念与原理 2 一、操作系统中线程和进程的概念 2 二、Java中的线程 3 三、Java中关于线程的名词解释...Java线程:并发协作-生产者消费者模型 52 Java线程:并发协作-死锁 55 Java线程:线程之间的数据传递 58
java多线程编程指南,一个比较高级和深入的java编程学习资料。
java多线程的使用方法如何使用,怎么使用,使用过程中有什么要注意的
Java多线程--同步机制解决线程安全问题方式二:同步方法
Java多线程编程Java多线程编程Java多线程编程Java多线程编程Java多线程编程Java多线程编程
详细介绍java多线程,多线程实例应用,是初学者入门的好教程!
Java多线程编程实战指南+设计模式篇(全部),很不错的书,可以多看看