在线程之中加入另一个线程

原创 2018年04月17日 13:24:43

一个线程可以在其他线程之上,调用join()方法,其效果是等待一段时间直到第二个线程结束才执行。如果某个线程在另外一个线程t上调用t.join(),此线程将被挂起,直到目标线程t结束才恢复(即t.isAlive()返回为假)。

也可以在调用join()时带上一个超时参数(单位可以是毫秒,或者毫秒和纳秒)这样如果目标线程在这段时间到期时还没有结束的话,join()方法总能返回。

对join()方法的调用可以被中断,做法是在调用 线程上调用interrupt()方法,这是需要用到try catch子句。

public class Sleeper extends Thread {
    private int duration;
    public Sleeper (String name,int sleeptime){
        super(name);
        duration=sleeptime;
        start();
    }
    public void run(){
        try {
            sleep(duration);
        }catch (InterruptedException e){
            System.out.print(getName()+"was interrupted."+"isInterrupted():"+isInterrupted());
        }
        System.out.print(getName()+"has awakened");
    }
}

public class Joiner1 extends Thread{
    private Sleeper sleeper;
    public Joiner1(String name,Sleeper sleeper){
        super(name);
        this.sleeper=sleeper;
        start();
    }
    public void run(){
        try {
            sleeper.join();
        }catch (InterruptedException e){

        }
    }
}

public class Joining {
    public static void  main(String[] args){
        Sleeper sleepy=new Sleeper("Sleepy",1500);
        Sleeper grumpy=new Sleeper("Grumpy",1500);
        Joiner1 dopey=new Joiner1("Dopey",sleepy);
        Joiner1 doc=new Joiner1("Doc",grumpy);
        grumpy.interrupt();
    }
}

python线程进程、异步IO

多线程是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间 执行多于一个线程,进而提升整体处理性能。 该章节主要包括线程进程的概念,基于python的线程进程实现,GIL锁的影响,消费者生产者模型,进程池的应用以及IO模型的介绍,一句话概括本章的内容就是:实现并发编程,即计算机能够同时处理多个任务。
  • 2017年03月06日 18:23

线程内数据共享(ThreadfLocal)

ThreadfLocal用于实现线程内的数据共享,多个模块在同一个线程中运行时要共享一份数据,而在另外线程中运行时又共享另外一份数据(如事务处理中数据库链接的共享,可以实现事务控制),static变量...
  • conquer0715
  • conquer0715
  • 2013-07-04 14:19:37
  • 3645

进程与线程 垃圾回收 索引优化

进程   线程 进程 process:程序在执行过程中分配和管理资源的基本单位   进程有自己的地址空间  同一个进程内的所有线程都可以访问这些资源 线程 thread:程序独立运行和独立调度的基本单...
  • u010094934
  • u010094934
  • 2016-09-05 08:02:12
  • 189

一个线程控制另一个线程的暂停或启动

MainTest类中可以控制线程的暂停或继续运行。 public class MainTest { /** * 这个线程操作另一个线程的暂停或开始 * @param args */ ...
  • fengzy1990
  • fengzy1990
  • 2014-12-17 22:20:51
  • 3118

Java 内存模型与线程

摘自《深入理解 Java 虚拟机:JVM 高级特性与最佳实践》(第二版) 我们首先了解虚拟机 Java 内存模型的结构及操作,然后讲解了原子性、可见性、有序性在 Java 内存模型中的体现...
  • u013678930
  • u013678930
  • 2016-08-09 12:46:28
  • 355

Android 让一个线程控制另一个线程

设:让线程A,监视线程mSender 第一步: 在A中定义一个变量:ExecutorService transThread = Executors.newSingleThreadExecutor();...
  • qq_29158381
  • qq_29158381
  • 2015-12-25 09:27:59
  • 877

在一个线程加锁,另一个线程解锁

一般来讲,一个线程加锁,另一个线程解锁,是很容易死锁的。 产生死锁的四个必要条件: (1) 互斥条件:一个资源每次只能被一个进程使用。 (2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资...
  • p2016
  • p2016
  • 2017-08-03 15:03:30
  • 863

WPF中调用线程无法访问此对象,因为另一个线程拥有该对象 的解决方法

在调试中,出现这个错误的原因,我在网上查了很多。大体上总结一下是:   两个或多个线程操作一个控件所引起的问题。          在WPF中,UI分创建线程和访问线程。所以需要用委托机制来解决。 ...
  • huguoqun
  • huguoqun
  • 2013-10-30 21:09:52
  • 3918

WPF 调用线程无法访问此对象,因为另一个线程拥有该对象

为了实现数据能够在文本框中逐条输出,需要用到了线程。
  • u010927640
  • u010927640
  • 2016-12-14 21:47:29
  • 920

从一个线程中给另一个线程发送通知

当需要线程等待某个事物时,可以创建一个condition对象,然后通过这个对象来通知那些等待的线程。 #include #include #include #include #inc...
  • fkfang
  • fkfang
  • 2014-11-02 21:51:49
  • 1461
收藏助手
不良信息举报
您举报文章:在线程之中加入另一个线程
举报原因:
原因补充:

(最多只允许输入30个字)