join函数的作用,是让当前线程等待,直到调用join()的 线程结束或者等到一段时间,我们来看以下代码

  1. package mian;
  2.  
  3. public class simpleplela {
  4. static void threadMessage(String message) {
  5. String threadName =
  6. Thread.currentThread().getName();
  7.  
  8. System.out.println(threadName+" "+message
  9. );
  10. }
  11.  
  12. private static class MessageLoop
  13. implements Runnable {
  14. public void run(){
  15.  
  16. String importantInfo[] = {
  17. "ONe",
  18. "TWo",
  19. "THREe",
  20. "four"
  21. };
  22. try{
  23. for(int i = 0;
  24. i<importantInfo.length;
  25. i++){
  26. Thread.sleep(4000);
  27. threadMessage(importantInfo[i]);
  28. }
  29. }
  30. catch(InterruptedException e){
  31. threadMessage("I was'nt done!");
  32. }
  33. }
  34. }
  35. public static void main(String args[])
  36. throws InterruptedException {
  37. long patience = 1000*10;
  38. if(args.length>0){
  39. try{
  40. patience = Long.parseLong(args[0])*1000;
  41. }catch(NumberFormatException e){
  42. System.err.println("Argument must be an integer");
  43. System.exit(1);
  44. }
  45. }
  46. threadMessage("Starting MessageLoop Thread");
  47. long startTime = System.currentTimeMillis();
  48. Thread t = new Thread(new MessageLoop());
  49. t.start();
  50. threadMessage("Waiting for MEssageLoop Thread to finish");
  51. while((t.isAlive())){
  52. threadMessage("still waiting...");
  53.  
  54. t.join();
  55. if (((System.currentTimeMillis() - startTime) > patience)
  56. && t.isAlive()) {
  57. threadMessage("Tired of waiting!");
  58. t.interrupt();
  59. // Shouldn't be long now
  60. // -- wait indefinitely
  61. t.join();
  62. }
  63. }
  64. threadMessage("Finally!");
  65. }
  66.  
  67. }

输出如下

  1. package mian;
  2.  
  3. public class simpleplela {
  4. static void threadMessage(String message) {
  5. String threadName =
  6. Thread.currentThread().getName();
  7.  
  8. System.out.println(threadName+" "+message
  9. );
  10. }
  11.  
  12. private static class MessageLoop
  13. implements Runnable {
  14. public void run(){
  15.  
  16. String importantInfo[] = {
  17. "ONe",
  18. "TWo",
  19. "THREe",
  20. "four"
  21. };
  22. try{
  23. for(int i = 0;
  24. i<importantInfo.length;
  25. i++){
  26. Thread.sleep(4000);
  27. threadMessage(importantInfo[i]);
  28. }
  29. }
  30. catch(InterruptedException e){
  31. threadMessage("I was'nt done!");
  32. }
  33. }
  34. }
  35. public static void main(String args[])
  36. throws InterruptedException {
  37. long patience = 1000*10;
  38. if(args.length>0){
  39. try{
  40. patience = Long.parseLong(args[0])*1000;
  41. }catch(NumberFormatException e){
  42. System.err.println("Argument must be an integer");
  43. System.exit(1);
  44. }
  45. }
  46. threadMessage("Starting MessageLoop Thread");
  47. long startTime = System.currentTimeMillis();
  48. Thread t = new Thread(new MessageLoop());
  49. t.start();
  50. threadMessage("Waiting for MEssageLoop Thread to finish");
  51. while((t.isAlive())){
  52. threadMessage("still waiting...");
  53.  
  54. t.join(1000);
  55. if (((System.currentTimeMillis() - startTime) > patience)
  56. && t.isAlive()) {
  57. threadMessage("Tired of waiting!");
  58. t.interrupt();
  59. // Shouldn't be long now
  60. // -- wait indefinitely
  61. t.join();
  62. }
  63. }
  64. threadMessage("Finally!");
  65. }
  66.  
  67. }

输出如下 我们分析一下,两段代码只有一行不一样。第一段是t.join(),会让当前线程(例子中为主线程)一直等待,知道t结束;

第二段是t.join(1000),会让当前线程等待1000毫秒,之后继续。

thread.join函数,java多线程中的join函数解析的更多相关文章

  1. Java多线程中的join()方法

    一.join()方法介绍 join() 定义在Thread.java中.join()方法把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.比如在线程B中调用了线程A的join( ...

  2. java多线程中关于join方法的使用

    Thread的非静态方法join()让一个线程B"加入"到另外一个线程A的尾部.在A执行完毕之前,B不能工作.例如:         Thread t = new MyThread ...

  3. 浅谈Java多线程中的join方法

    先上代码 新建一个Thread,代码如下: package com.thread.test; public class MyThread extends Thread { private String ...

  4. Java多线程中的join方法

    新建一个Thread,代码如下: package com.thread.test; public class MyThread extends Thread { private String name ...

  5. Java多线程中的常用方法

    本文将带你讲诉Java多线程中的常用方法   Java多线程中的常用方法有如下几个 start,run,sleep,wait,notify,notifyAll,join,isAlive,current ...

  6. 【Java.Regex】使用正则表达式查找一个Java类中的成员函数

    代码: import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; imp ...

  7. java 多线程中的wait方法的详解

    java多线程中的实现方式存在两种: 方式一:使用继承方式 例如: PersonTest extends Thread{ String name; public PersonTest(String n ...

  8. 关于java多线程中异常捕获的理解

    在java多线程程序中,所有线程都不允许抛出未捕获的checked exception(比如sleep时的InterruptedException),也就是说各个线程需要自己把自己的checked e ...

  9. Java多线程中的竞争条件、锁以及同步的概念

    竞争条件 1.竞争条件: 在java多线程中,当两个或以上的线程对同一个数据进行操作的时候,可能会产生“竞争条件”的现象.这种现象产生的根本原因是因为多个线程在对同一个数据进行操作,此时对该数据的操作 ...

随机推荐

  1. netty是什么?

    Netty是什么? 相对于Tomcat这种Web Server(顾名思义主要是提供Web协议相关的服务的),Netty是一个Network Server,是处于Web Server更下层的网络框架,也 ...

  2. JTable单元格放自定义控件(一)-如何在JTable的单元格放JPanel

    原文链接:http://blog.sina.com.cn/s/blog_7f1c8c710101hdpf.html 最近自己尝试着模仿着实现一款非常有名的进销库存管理系统(智慧记)里面的一个功能.功能 ...

  3. [POJ3279]Fliptile(开关问题,枚举)

    题目链接:http://poj.org/problem?id=3279 题解:http://www.cnblogs.com/helenawang/p/5538547.html /* ━━━━━┒ギリギ ...

  4. Effective C++学习笔记 条款06:如不想使用编译器自动生成的函数,就该明确拒绝

    一.为驳回编译器自动提供的机能,可将相应成员函数声明为private并且不予实现.(如果你仅仅是自己不实现的话,编译器会帮你实现) 如: class A { public: A(const strin ...

  5. android完全退出应用程序

    android 完全退出应用程序android android 退出应用程序, 单例模式管理Activity引自:http://www.yoyong.com/archives/199android 退 ...

  6. Akka的Actor模型及使用实例

    本文的绝大部分内容转载自rerun.me这一blog,老外写的东西就是好啊. ACTORS介绍 Anyone who has done multithreading in the past won't ...

  7. poj3683 Priest John's Busiest Day

    2-SAT. 读入用了黄学长的快速读入,在此膜拜感谢. 把每对时间当作俩个点.如果有交叉代表相互矛盾. 然后tarjan缩点,这样就能得出当前的2-SAT问题是否有解. 如果有解,跑拓扑排序就能找出一 ...

  8. js 时间转成时间戳对比;My97DatePicker日历控件时间格式;Date.parse Firefox火狐浏览器返回Nan的解决办法

    有个情况,我在显示时间的时候是需要显示为  2013年8月15日 14时28分15秒 但是假如我用js去获取到这个时间,并且想进行时间对比的时候,这个时间2013年8月15日 14时28分15秒根本就 ...

  9. 【解决方案】jquery live的change事件在IE下失效

    $("#spanChildSec select").live("change", function () {              //处理内容       ...

  10. 编译安装lnmp

    http://wenku.baidu.com/view/ec45d5dd28ea81c758f578cc.html