package self; /* *由主线程产生一个副线程,监控副线程的运行时间,如果运行时间过长,则杀掉副线程 * */ public class TestThread { public static void main(String[] args){ //创建副线程 Thread minorThread = new Thread(new MinorThread()); //创建主线程,副线程随主线程一起启动 Thread majorThread = new Thread(new MajorThread(minorThread)); majorThread.start(); } } class MajorThread implements Runnable { Thread thread = null; public MajorThread(Thread thread){ this.thread = thread; } @Override public void run(){ long startTime = System.currentTimeMillis(); //启动副线程 thread.start(); while(thread.isAlive()){ try { System.out.println("thread is Alive "); /* *使用join(1000) 主线程将等待1s,先让thread执行 * 如果join() 没有指定等待时间,则默认先让thread执行完毕之后,在执行当前线程 */ thread.join(1000); long runningTime = System.currentTimeMillis(); long endTime = (runningTime-startTime)/1000; /* * 如果超过3s thread还没有执行完毕,则直接kill掉thread线程 */ if(endTime>3){ //中断线程 thread.interrupt(); System.out.println("超过3s thread还没有执行完毕,则直接kill掉thread线程"); //让thread线程执行完 thread.join(); } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println("thread is not Alive ... finish!"); } } class MinorThread implements Runnable { String[] massages = { "ji hai bo...", "zhang xiao yan...", "hello world...", "OK OK!", "too too" }; @Override public void run() { System.out.println(Thread.currentThread().getName() + " is start"); try{ for (String massage : massages) { System.out.println(massage); Thread.sleep(1000); } } catch (InterruptedException e) { System.out.println("Thread interrupted..................."); e.printStackTrace(); } /*while (true) { //隔一分钟打印一次 for (String massage : massages) { System.out.println(massage); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); return; } } if (Thread.interrupted()){ System.out.println("Thread interrupted"); try { throw new InterruptedException(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }*/ } }
相关推荐
Java线程中wait、await、sleep、yield、join用法汇总,文章里面总结了这些关键字的用法,并且里面带有源码帮助分析用法,此一文就可以理解这些关键字用法,推荐拥有
主要介绍了浅谈java线程join方法使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
主要介绍了java 线程方法join简单用法,结合实例形式总结分析了Java线程join方法的功能、原理及使用技巧,需要的朋友可以参考下
一个线程join另一个线程,(包括和interrupt互动的用法)1---马克-to-win java视频
java线程分析java project例子,里面分析了sleep(),join(),yield()和wait以及notify等方法的使用以及需要注意的地方。
一个线程join另一个线程,(包括和interrupt互动的用法)3---马克-to-win java视频
一个线程join另一个线程,(包括和interrupt互动的用法)2---马克-to-win java视频
Java线程调度的一点背景 在各种各样的线程中,Java虚拟机必须实现一个有优先权的、基于优先级的调度程序。这意味着Java程序中的每一个线程被分配到一定的优先权,使用定义好的范围内的一个正整数表
Java join 线程控制用法,需要的朋友可以参考一下
在char03包里放置了Java线程间通信的知识的代码。内容如下: 等待/通知机制 join方法的使用 在char04包里放置了Java中Lock类的知识的代码,内容如下: Lock类 Lock类其他功能 Condition类 Condition类其他...
本篇文章介绍了,java线程之join方法的使用分析,需要的朋友参考下
主要为大家详细介绍了Java使用join方法暂停当前线程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
线程的基本概念、线程类...在Java中,可以使用Thread类的join()方法实现线程的合并。 线程的中断是指在一个线程中断另一个线程的执行。在Java中,可以使用Thread类的interrupt()方法实现线程的中断。(run方法执行完毕)
目录 理解线程的概念 通过Thread直接创建子线程 实现Runnable接口创建自线程 线程状态(创建、就绪、执行、阻塞、终止...每当使用java命令执行一个类的时候,实际上都会启动一个JVM,每一个JVM实际上就是在操作系统中启
主要介绍了Java中join线程操作,结合实例形式分析了java使用join方法操作线程的相关原理与实现技巧,需要的朋友可以参考下
3)线程join()方法 8 4)几种多线程代码写法 10 5)一个超时自动退出程序的类 12 6)同步锁synchronized 13 7)一个程序执行1秒之后自动退出 13 8)线程的状态 14 9)线程阻塞的条件(重要) 14 10) Interrupt()注意事项 16 ...
Java实验指导书_多线程 《Java语言程序设计基础教程》 上机实验指导手册 异常处理 【目的】 ①线程的创建和运行 ②Thread类的sleep、join等方法的使用 ③线程同步
本文对java Thread中join()方法进行介绍,join()的作用是让“主线程”等待“子线程”结束之后才能继续运行,大家参考使用吧
主要介绍了Java线程编程中isAlive()和join()的使用详解,是Java入门学习中的基础知识,需要的朋友可以参考下
join方法 yield方法 多线程 进程和线程 进程与线程最主要的区别是它们是操作系统管理资源的不同方式的体现。 准确来说进程与线程属于衍生关系。 进程是操作系统执行程序的一次过程,在这个过程中可能会产生多个线程。...