thread.join函数,java多线程中的join函数解析
join函数的作用,是让当前线程等待,直到调用join()的 线程结束或者等到一段时间,我们来看以下代码
- package mian;
- public class simpleplela {
- static void threadMessage(String message) {
- String threadName =
- Thread.currentThread().getName();
- System.out.println(threadName+" "+message
- );
- }
- private static class MessageLoop
- implements Runnable {
- public void run(){
- String importantInfo[] = {
- "ONe",
- "TWo",
- "THREe",
- "four"
- };
- try{
- for(int i = 0;
- i<importantInfo.length;
- i++){
- Thread.sleep(4000);
- threadMessage(importantInfo[i]);
- }
- }
- catch(InterruptedException e){
- threadMessage("I was'nt done!");
- }
- }
- }
- public static void main(String args[])
- throws InterruptedException {
- long patience = 1000*10;
- if(args.length>0){
- try{
- patience = Long.parseLong(args[0])*1000;
- }catch(NumberFormatException e){
- System.err.println("Argument must be an integer");
- System.exit(1);
- }
- }
- threadMessage("Starting MessageLoop Thread");
- long startTime = System.currentTimeMillis();
- Thread t = new Thread(new MessageLoop());
- t.start();
- threadMessage("Waiting for MEssageLoop Thread to finish");
- while((t.isAlive())){
- threadMessage("still waiting...");
- t.join();
- if (((System.currentTimeMillis() - startTime) > patience)
- && t.isAlive()) {
- threadMessage("Tired of waiting!");
- t.interrupt();
- // Shouldn't be long now
- // -- wait indefinitely
- t.join();
- }
- }
- threadMessage("Finally!");
- }
- }
输出如下
- package mian;
- public class simpleplela {
- static void threadMessage(String message) {
- String threadName =
- Thread.currentThread().getName();
- System.out.println(threadName+" "+message
- );
- }
- private static class MessageLoop
- implements Runnable {
- public void run(){
- String importantInfo[] = {
- "ONe",
- "TWo",
- "THREe",
- "four"
- };
- try{
- for(int i = 0;
- i<importantInfo.length;
- i++){
- Thread.sleep(4000);
- threadMessage(importantInfo[i]);
- }
- }
- catch(InterruptedException e){
- threadMessage("I was'nt done!");
- }
- }
- }
- public static void main(String args[])
- throws InterruptedException {
- long patience = 1000*10;
- if(args.length>0){
- try{
- patience = Long.parseLong(args[0])*1000;
- }catch(NumberFormatException e){
- System.err.println("Argument must be an integer");
- System.exit(1);
- }
- }
- threadMessage("Starting MessageLoop Thread");
- long startTime = System.currentTimeMillis();
- Thread t = new Thread(new MessageLoop());
- t.start();
- threadMessage("Waiting for MEssageLoop Thread to finish");
- while((t.isAlive())){
- threadMessage("still waiting...");
- t.join(1000);
- if (((System.currentTimeMillis() - startTime) > patience)
- && t.isAlive()) {
- threadMessage("Tired of waiting!");
- t.interrupt();
- // Shouldn't be long now
- // -- wait indefinitely
- t.join();
- }
- }
- threadMessage("Finally!");
- }
- }
输出如下 我们分析一下,两段代码只有一行不一样。第一段是t.join(),会让当前线程(例子中为主线程)一直等待,知道t结束;
第二段是t.join(1000),会让当前线程等待1000毫秒,之后继续。
thread.join函数,java多线程中的join函数解析的更多相关文章
- Java多线程中的join()方法
一.join()方法介绍 join() 定义在Thread.java中.join()方法把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.比如在线程B中调用了线程A的join( ...
- java多线程中关于join方法的使用
Thread的非静态方法join()让一个线程B"加入"到另外一个线程A的尾部.在A执行完毕之前,B不能工作.例如: Thread t = new MyThread ...
- 浅谈Java多线程中的join方法
先上代码 新建一个Thread,代码如下: package com.thread.test; public class MyThread extends Thread { private String ...
- Java多线程中的join方法
新建一个Thread,代码如下: package com.thread.test; public class MyThread extends Thread { private String name ...
- Java多线程中的常用方法
本文将带你讲诉Java多线程中的常用方法 Java多线程中的常用方法有如下几个 start,run,sleep,wait,notify,notifyAll,join,isAlive,current ...
- 【Java.Regex】使用正则表达式查找一个Java类中的成员函数
代码: import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; imp ...
- java 多线程中的wait方法的详解
java多线程中的实现方式存在两种: 方式一:使用继承方式 例如: PersonTest extends Thread{ String name; public PersonTest(String n ...
- 关于java多线程中异常捕获的理解
在java多线程程序中,所有线程都不允许抛出未捕获的checked exception(比如sleep时的InterruptedException),也就是说各个线程需要自己把自己的checked e ...
- Java多线程中的竞争条件、锁以及同步的概念
竞争条件 1.竞争条件: 在java多线程中,当两个或以上的线程对同一个数据进行操作的时候,可能会产生“竞争条件”的现象.这种现象产生的根本原因是因为多个线程在对同一个数据进行操作,此时对该数据的操作 ...
随机推荐
- netty是什么?
Netty是什么? 相对于Tomcat这种Web Server(顾名思义主要是提供Web协议相关的服务的),Netty是一个Network Server,是处于Web Server更下层的网络框架,也 ...
- JTable单元格放自定义控件(一)-如何在JTable的单元格放JPanel
原文链接:http://blog.sina.com.cn/s/blog_7f1c8c710101hdpf.html 最近自己尝试着模仿着实现一款非常有名的进销库存管理系统(智慧记)里面的一个功能.功能 ...
- [POJ3279]Fliptile(开关问题,枚举)
题目链接:http://poj.org/problem?id=3279 题解:http://www.cnblogs.com/helenawang/p/5538547.html /* ━━━━━┒ギリギ ...
- Effective C++学习笔记 条款06:如不想使用编译器自动生成的函数,就该明确拒绝
一.为驳回编译器自动提供的机能,可将相应成员函数声明为private并且不予实现.(如果你仅仅是自己不实现的话,编译器会帮你实现) 如: class A { public: A(const strin ...
- android完全退出应用程序
android 完全退出应用程序android android 退出应用程序, 单例模式管理Activity引自:http://www.yoyong.com/archives/199android 退 ...
- Akka的Actor模型及使用实例
本文的绝大部分内容转载自rerun.me这一blog,老外写的东西就是好啊. ACTORS介绍 Anyone who has done multithreading in the past won't ...
- poj3683 Priest John's Busiest Day
2-SAT. 读入用了黄学长的快速读入,在此膜拜感谢. 把每对时间当作俩个点.如果有交叉代表相互矛盾. 然后tarjan缩点,这样就能得出当前的2-SAT问题是否有解. 如果有解,跑拓扑排序就能找出一 ...
- js 时间转成时间戳对比;My97DatePicker日历控件时间格式;Date.parse Firefox火狐浏览器返回Nan的解决办法
有个情况,我在显示时间的时候是需要显示为 2013年8月15日 14时28分15秒 但是假如我用js去获取到这个时间,并且想进行时间对比的时候,这个时间2013年8月15日 14时28分15秒根本就 ...
- 【解决方案】jquery live的change事件在IE下失效
$("#spanChildSec select").live("change", function () { //处理内容 ...
- 编译安装lnmp
http://wenku.baidu.com/view/ec45d5dd28ea81c758f578cc.html