- 浏览: 574308 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (669)
- oracle (36)
- java (98)
- spring (48)
- UML (2)
- hibernate (10)
- tomcat (7)
- 高性能 (11)
- mysql (25)
- sql (19)
- web (42)
- 数据库设计 (4)
- Nio (6)
- Netty (8)
- Excel (3)
- File (4)
- AOP (1)
- Jetty (1)
- Log4J (4)
- 链表 (1)
- Spring Junit4 (3)
- Autowired Resource (0)
- Jackson (1)
- Javascript (58)
- Spring Cache (2)
- Spring - CXF (2)
- Spring Inject (2)
- 汉字拼音 (3)
- 代理模式 (3)
- Spring事务 (4)
- ActiveMQ (6)
- XML (3)
- Cglib (2)
- Activiti (15)
- 附件问题 (1)
- javaMail (1)
- Thread (19)
- 算法 (6)
- 正则表达式 (3)
- 国际化 (2)
- Json (3)
- EJB (3)
- Struts2 (1)
- Maven (7)
- Mybatis (7)
- Redis (8)
- DWR (1)
- Lucene (2)
- Linux (73)
- 杂谈 (2)
- CSS (13)
- Linux服务篇 (3)
- Kettle (9)
- android (81)
- protocol (2)
- EasyUI (6)
- nginx (2)
- zookeeper (6)
- Hadoop (41)
- cache (7)
- shiro (3)
- HBase (12)
- Hive (8)
- Spark (15)
- Scala (16)
- YARN (3)
- Kafka (5)
- Sqoop (2)
- Pig (3)
- Vue (6)
- sprint boot (19)
- dubbo (2)
- mongodb (2)
最新评论
join() 方法主要是让调用该方法的线程完成run方法里面的东西后,再执行join()方法后面的代码。
join方法的功能就是使异步执行的线程变成同步执行。也就是说,当调用线程实例的start方法后,这个方法会立即返回,如果在调用start方法后后需要使用一个由这个线程计算得到的值,就必须使用join方法。如果不使用join方法,就不能保证当执行到start方法后面的某条语句时,这个线程一定会执行完。而使用join方法后,直到这个线程退出,程序才会往下执行。
class ThreadTesterA implements Runnable { private int counter; @Override public void run() { while (counter <= 10) { System.out.print("Counter = " + counter + " "); counter++; } System.out.println(); } } class ThreadTesterB implements Runnable { private int i; @Override public void run() { while (i <= 10) { System.out.print("i = " + i + " "); i++; } System.out.println(); } } public class ThreadTester { public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread(new ThreadTesterA()); Thread t2 = new Thread(new ThreadTesterB()); t1.start(); t1.join(); // wait t1 to be finished t2.start(); t2.join(); // in this program, this may be removed } }
package mythread; public class JoinThread extends Thread { public static int n = 0 ; public static synchronized void inc(){ n ++ ; } public void run(){ for ( int i = 0 ; i < 10 ; i ++ ) try { inc(); // n = n + 1 改成了 inc(); sleep( 3 ); // 为了使运行结果更随机,延迟3毫秒 } catch (Exception e) { } } public static void main(String[] args) throws Exception{ Thread threads[] = new Thread[ 100 ]; for ( int i = 0 ; i < threads.length; i ++ ) // 建立100个线程 threads[i] = new JoinThread(); for ( int i = 0 ; i < threads.length; i ++ ) // 运行刚才建立的100个线程 threads[i].start(); for ( int i = 0 ; i < threads.length; i ++ ) // 100个线程都执行完后继续 必须加上join方法 threads[i].join(); System.out.println( " n= " + JoinThread.n); } }
join方法的功能就是使异步执行的线程变成同步执行。也就是说,当调用线程实例的start方法后,这个方法会立即返回,如果在调用start方法后后需要使用一个由这个线程计算得到的值,就必须使用join方法。如果不使用join方法,就不能保证当执行到start方法后面的某条语句时,这个线程一定会执行完。而使用join方法后,直到这个线程退出,程序才会往下执行。
发表评论
文章已被作者锁定,不允许评论。
-
java WeakHashMap学习(key是弱引用)
2018-06-21 09:31 1184在Java集合中有一种特殊的Map类型:WeakHashMap ... -
java HashMap TreeMap(key顺序) LinkedHashMap(插入顺序)学习
2018-06-07 10:27 910java为数据结构中的映射定义了一个接口java.util.M ... -
java RESTful 详解
2018-04-27 11:35 591(1)每一个URI代表一种资源,独一无二; (2)客户端 ... -
java 通过HttpsUrlConnection访问接口数据
2018-04-19 11:25 919server: ssl: key-stor ... -
java 使用多线程的场景总结
2018-04-10 14:35 1658在一个高并发的网站中,多线程是必不可少的。下面先说一下多线程在 ... -
java Enum枚举设置
2018-04-10 10:55 448/** * 数据状态:0:无效,1:有效 **/ ... -
java RestTemplate访问restful服务
2018-03-01 15:02 1570REST的基础知识 当谈论REST时,有一种常见的错误就是将其 ... -
java FYOpenApi实现短信发送
2018-01-02 17:10 10831.配置文件 sms.OpenUrl = http://s ... -
java JSONObject序列化包含Date类型数据的Java对象
2017-12-26 16:31 1559如果Date.class无法进行转换则使用Timestamp. ... -
java 用HttpsURLConnection进行传递中文时错误总结
2017-12-07 16:42 602传递中文时需要用Writer而不是OutputStream ... -
java 内存泄漏
2017-11-27 13:51 4651.内存溢出 out of memory ... -
ActiveMQ 三种发送消息方式(同步,异步,单向)
2017-11-17 10:25 2303MQ 发送普通消息有三种实现方式:可靠同步发送、可靠异步发送、 ... -
java Guava ListenableFuture实现线程回调功能
2017-11-14 10:17 1748java Future具有局限性。在实际应用中,当需要下 ... -
java Curator实现分布式锁
2017-09-05 14:39 1059Curator实现分布式锁主要依赖于zookeeper ... -
java Guava工具集学习(强大)
2017-09-05 10:28 411import java.util.Iterator ... -
java CyclicBarrier进行并发编程
2017-08-25 15:44 626CyclicBarrier允许一组线程相互等待达到一个公共的障 ... -
java 几种性能优化的总结
2017-08-23 14:08 2851、使用StringBuilder 一般 ... -
java 使用kyro进行高性能序列化对象和集合
2017-08-23 14:05 2091import java.io.ByteArrayInp ... -
java 对重复电话号码进行排除的优化(排序和前后对比)
2017-08-22 14:14 7441.先对10万数据排序; 2.对比前后两条数据 ; 3.筛 ... -
ActiveMQ 结合Spring进行数据同步
2017-07-19 15:27 550注意事项hibernate配置文件必须设置自动提交否则不能插入 ...
相关推荐
线程调用类对象 在前面的示例中,我们为线程任务使用了通常的函数。实际上,我们可以使用任何可调用对象或者lambda函数,如下调用类对象的例子: #include #include <thread> class MyFunctor { public: void ...
我知道的线程同步的方法主要是thread.join(),等待另一个线程的完成再继续进行本线程的工作。 不过在android中,mainThread控制着屏幕的刷新,如果调用在main thread中调用join将会导致屏幕无法刷新。 所以,我们...
为了避免线程这种复杂的执行方式,让程序顺序输出,需要在启动线程后调用“join()”方法使线程等待。 线程等待 线程等待,具体实现: import threading import time def thread1_job(): print('T1 start\n') time....
这段代码实现了一个下载器,可以同时下载多个文件。其中,构造函数MultiThreadDownloader接收一个URL数组和两个整数数组作为参数,分别表示每个URL的起始...最后,通过调用每个线程的join()方法等待所有线程执行完毕。
当NewThread调用Join方法的时候,MainThread就被停止执行, 直到NewThread线程执行完毕。 Thread oThread = new Thread(new ThreadStart(oAlpha.Beta)); oThread.Start(); while (!oThread.IsAlive) //表示线程当
demoSynchrony.java 演示线程的同步 setDataThread.java 设置数据的线程类 readDataThread.java 读取数据的线程类 demoEnhanceThread.java 使用自己定义的线程类示例 producer_consumer.java 演示生产者-消费者...
在main()方法中启动两个线程,然后调用thread1.join()和thread2.join(),以使主线程在“线程1”和“线程2”都返回结果之前不会进一步执行。 最后将两个线程的计算结果相加,得到100! + 100000! 下面就让我们使用...
Waiting:具有指定等待时间的等待线程的线程状态(sleep、wait、join、parkNanos、parkUntil) 6.Terminated:终止线程的线程状态。线程正常执行完成或出现异常 代码:Demo01 线程切换状态图 线程终止 不正确的线程...
exit,则整个进程的所有线程都终止,由于从main函数return也相当于调用exit,为了防止新创建的线程还没有得到执行就终止,我们在main函数return之前延时1秒,这只是一种权宜之计,即使主线程等待1秒,内核也不一定会...
这将阻塞正在调用的线程,直到被调用join()方法的线程结束。(好难翻译,应该是这个意思) 哈哈,这个易懂。 join方法,如果一个线程或者一个函数在执行过程中要调用另外一个线程,并且待到其完成以后才能接着执行,...
在使用std::thread的时候,对创建的线程有两种操作:等待/分离,也就是join/detach操作。join()操作是在std::thread t(func)后“某个”合适的地方调用,其作用是回收对应创建的线程的资源,避免造成资源的泄露。...
thread state test project 1.对比java中的sleep()和wait()的区别 2.等待调用join方法的线程结束,再继续执行
学生提问:老师,我想学习Java编程,到底是学习Eclipse好呢,还是学习JBuilder好呢? 21 1.9 本章小结 22 本章练习 22 第2章 理解面向对象 23 2.1 面向对象 24 2.1.1 结构化程序设计简介 24 2.1.2 程序的三种...
先创建ThreadStart代理,指定要由该线程执行的线程函数,然后将ThreadStart代理传递给Thread类的构造函数,调用Thread类的Start方法启动新的线程然后调用Join()方法保证应用程序域等待异步程序结束后才终止运行。...
先创建ThreadStart代理,指定要由该线程执行的线程函数,然后将ThreadStart代理传递给Thread类的构造函数,调用Thread类的Start方法启动新的线程然后调用Join()方法保证应用程序域等待异步程序结束后才终止运行。...
/*join的意思是使得放弃当前线程的执行,并返回对应的线程,例如下面代码的意思就是:程序在main线程中调用t1线程的join方法,则main线程放弃cpu控
update() 在线程同步中,为了唤醒另一个等待的线程,使用下列方法 () [单选题] * A.sleep() B.wait() C.notify()(正确答案) D. join() Java高级程序设计测试含答案全文共40页,当前为第4页。Java提供以下哪个...
Thread类提供了join()函数,它用来让一个线程等待另一个线程执行完成,当程序的执行过程中线程A调用了线程B的join()函数时,线程A将被阻塞,直到线程B执行完成。 该方法的设计主要用于将大的问题拆分成若干个小问题...
– target 执行方法 – name 线程名字 – args target执行的元组参数 – kwargs target执行的字典参数 Thread对象函数 函数 描述 start() 开始线程的执行 run() 定义线程的功能的函数(一般会被子类重写) join...
8.3.3使用isAlive()和join()等待子线程结束273 8.3.4设置线程优先级275 8.4线程的通信与协调277 8.4.1线程的互斥277 8.4.2线程的同步279 8.4.3暂停、恢复和停止线程282 8.4.4生产者-消费者问题实例284 8.5本...