关于java多线程中的join方法

问题描述

关于java多线程中的join方法

1、主线程可能在子线程结束之前 结束吗?如果可能的话 举一个例子
2、如何理解join方法, 结合实际应用、

非常感谢非常感谢!!!

解决方案

关于join,参考:http://www.blogjava.net/jnbzwm/articles/330549.html

解决方案二:

主线程可能在子线程结束之前 结束吗
一般来说不可以,但是也不一定,如果子线程在执行finally中的代码,应该会等它执行完了才退出。

晕,join方法和什么“让主线程等子线程都结束了,在结束主线程,最后退出进程”没有任何关系。
join方法就是让当前线程阻塞住,不继续执行下面的代码,直到join的那个线程执行完返回才往下执行。

解决方案三:

不能,主线程结束,整个进程结束了,子线程被i 强制结束。
join就是让主线程等子线程都结束了,在结束主线程,最后退出进程

解决方案四:

join就是当前线程结束了就执行join里面的方法

解决方案五:

 public final synchronized void join(long millis)
    throws InterruptedException {
        long base = System.currentTimeMillis();
        long now = 0;

        if (millis < 0) {
            throw new IllegalArgumentException("timeout value is negative");
        }

        if (millis == 0) {
            while (isAlive()) {
                wait(0);
            }
        } else {
            while (isAlive()) {
                long delay = millis - now;
                if (delay <= 0) {
                    break;
                }
                wait(delay);
                now = System.currentTimeMillis() - base;
            }
        }
    }

join里边就是调用了wait(),也就是使**当前线程**(也就是调用join()方法的线程)阻塞。
所谓的等待子线程都结束,前提是你调用Thread.join()之前启动**当前线程**之外的其它线程。

时间: 2024-10-27 10:56:18

关于java多线程中的join方法的相关文章

java join-java多线程中的join问题

问题描述 java多线程中的join问题 各位大神,本人java小菜鸟.学习java遇到一点问题,下面的代码中,已经使用了join方法,为什么显示的结果不是1000呢?请前辈指教! public class JoinThread extends Thread { public static volatile int n=0; public void run(){ for(int i=0;i<10;i++,n++){ try{ sleep(2); }catch(Exception e){} } }

java 多线程-下面两个方法同步吗,请说明理由,有什么方法可以验证?

问题描述 下面两个方法同步吗,请说明理由,有什么方法可以验证? class Test { synchronized static void say Hello3() { } synchronizedvoid getX() {} } 解决方案 现实应用如下场景: 一个人名叫王X的人 暗地销售火车票,数量为 SUM=1000; 某个时刻 用户甲从他那里购买了2张. 某个时刻 用户乙从他那里购买了4张. 某个时刻 用户丙从他那里购买了7张. ............... 购买者必须轮流购买火车票.

java多线程中的volatile和synchronized用法分析_java

本文实例分析了java多线程中的volatile和synchronized用法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package com.chzhao; public class Volatiletest extends Thread {     private static int count = 0;     public void run() {         count++;     }     public static void main(String

浅析Python中的join()方法的使用

  这篇文章主要介绍了Python中的join()方法的使用,是Python入门中的基础知识,需要的朋友可以参考下 join()方法方法返回一个在序列的字符串元素被加入了由str分隔的字符串. 语法 以下是join()方法的语法: ? 1 str.join(sequence) 参数 sequence -- 这是要连接的元素的顺序. 返回值 此方法返回一个字符串,在序列seq字符串的连接.元素之间的分离器是字符串 str. 例子 下面的示例演示了join()方法的使用. ? 1 2 3 4 5 #

关于Java Swing中的repaint()方法及setVisible()的问题

问题描述 关于Java Swing中的repaint()方法及setVisible()的问题 我写了一个JFrame, 加了一个JComponent,进行一些处理后使用removeAll()移除了JComponent中的所有组件,然后调用add(JPanel)添加了一个新的组件,最后调用repaint()方法显示这个JPanel 这时发现JPanel无法显示,但调整窗口大小后就能显示 因为调整窗口大小不是会自动调用repaint()方法吗?但是我自己调用了啊为什么不会显示嘞. 接下来, 我在re

多线程问题-新手求助关于Java多线程中启动线程问题

问题描述 新手求助关于Java多线程中启动线程问题 public class Example15_1 { /** * @param args */public static void main(String[] args) { // TODO Auto-generated method stub SpeakHello speakHello; SpeakNinhao speakNinhao; speakHello = new SpeakHello(); speakNinhao= new Speak

java多线程中两个容器之间的同步

问题描述 java多线程中两个容器之间的同步 写了一个多线程的爬虫(对多线程不熟悉),但是每次队列中都有重复的元素,我把代码逻辑贴上来,大家帮我看一下,谢谢了: 在进程中: queue = LinkedBlockingQueue set = ConcurrentSkipListSet 在每个进程中使用了bfs bfs: while(!queue.empty()){ s = queue.poll() //...逻辑代码 set.add(s) //对s所有子状态扩展 for(son : s.sons

Java之Thread的join方法实例_java

本文实例讲述了Java之Thread的join方法.分享给大家供大家参考.具体实现方法如下: join public final void join() throws InterruptedException等待该线程终止. 抛出: InterruptedException - 如果任何线程中断了当前线程.当抛出该异常时,当前线程的中断状态 被清除.   下面的例子 通俗的讲,就是A调用join方法后,只有等A所在的线程不再运行,才会将进程分配出去 复制代码 代码如下: public class

Java多线程中的ThreadLocal,可继承,可修改

Java多线程中的ThreadLocal,可继承,可修改. package test; import java.util.Date; public class InheritableThreadLocalExt extends InheritableThreadLocal<Object>{ @Override protected Object initialValue() { return new Date().getTime(); } @Override protected Object c