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并发编程的基础。同时,使用时需特别注意...
浅谈Java线程join方法使用方法 Java中的线程join方法是一种实现线程同步的方式,可以将原本并行执行的多线程方法变成串行执行的。在Java中,线程join方法的作用是使当前线程等待另一个线程的结束,然后再继续执行...
Java线程中的`join()`方法是一个非常重要的同步工具,它允许一个线程(通常为主线程)等待另一个线程(子线程)执行完成后再继续执行。`join()`方法定义在`java.lang.Thread`类中,它使得多线程间的协作更加有序。 ...
### Java线程使用教程知识点详解 #### 一、线程基础概述 - **定义与特点**:线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中...希望本教程能帮助读者更好地理解和掌握Java线程的使用方法。
`start()`方法启动线程,`sleep()`方法让线程进入堵塞状态,`join()`方法等待线程执行完成,`yield()`方法让当前线程让出CPU,`stop()`方法停止线程(不推荐使用,因为可能引起数据不一致),`interrupt()`方法中断...
Java线程有10个优先级(MIN_PRIORITY, NORM_PRIORITY, MAX_PRIORITY),默认优先级是NORM_PRIORITY。但是,线程优先级并不保证绝对的执行顺序,操作系统调度策略可能影响实际执行顺序。 7. join()方法: 一个线程...
Java线程是多任务编程的重要概念,它允许程序同时执行多个独立的任务,从而提高系统效率和响应速度。在Java中,线程可以分为用户线程和守护线程,前者是程序运行的基础,而后者是在所有用户线程结束时才终止的后台...
通过以上内容的学习,读者可以深入了解Java线程的高级使用方法,掌握如何在Java程序中高效地管理和控制线程,以及如何解决多线程环境下常见的问题。这对于开发高性能、高可用性的Java应用至关重要。
本资源"JAVA线程学习(源代码)"提供了关于Java线程的源代码示例,帮助我们深入理解和实践线程的使用。 首先,我们要理解Java中的线程模型。Java线程由`java.lang.Thread`类或`java.util.concurrent.Executor`框架来...
#### 二、Java线程的使用场景 **2.1 提高用户界面响应速度** 在使用Swing等GUI库时,事件驱动的用户界面需要一个专门的事件线程来处理用户的输入。如果某个事件处理函数(如事件监听器)执行时间过长,会导致用户...
Java线程是多任务编程中的核心概念,它允许程序同时执行多个不同的任务,极大地提高了程序的效率和响应性。在Java中,线程是通过Java.lang.Thread类或实现Runnable接口来创建和管理的。这份“java线程文档大全”包含...
Java线程是Java编程语言中的一个核心概念,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,线程是通过类`Thread`或实现`Runnable`接口来创建和管理的。Java线程模型是基于操作系统的原生...
阻塞状态通常发生在线程等待I/O操作完成、调用sleep()方法、等待锁释放或者调用join()方法等待其他线程结束时。 在`threadTest`这个案例中,我们可能会看到如何使用这些概念来创建实际的应用场景。例如,一个典型的...
本文将深入探讨Java线程的核心概念、API以及在实际开发中的应用,旨在帮助你理解和掌握这一关键技能。 首先,我们需要了解什么是线程。在单核CPU系统中,线程是操作系统调度的基本单位,而在多核CPU系统中,每个...
主要介绍了java 线程方法join简单用法,结合实例形式总结分析了Java线程join方法的功能、原理及使用技巧,需要的朋友可以参考下
在Java多线程编程中,理解并正确使用`yield`和`join`方法是至关重要的。这两个方法都属于线程控制策略的一部分,但它们的作用和使用场景有所不同。 首先,我们来详细探讨`Thread.yield()`方法。这个方法的目的是让...
Java提供了多种机制来保证线程安全,比如使用synchronized关键字来同步方法或代码块,实现线程之间的同步。当一个线程试图进入一个已经被另一个线程持有的同步代码块时,它将进入阻塞状态,直到同步代码块的执行线程...
- `join()`方法:让当前线程等待另一个线程完成其执行。 4. **线程优先级与调度**:Java的`Thread`类提供了设置线程优先级的方法,如`setPriority(int priority)`,但实际线程调度依赖于操作系统的策略,优先级并...
一个线程join另一个线程,(包括和interrupt互动的用法)1---马克-to-win java视频
- **join() 方法**:一个线程可以使用`join()`方法等待另一个线程结束。 - **volatile 关键字**:用于标记可能被多个线程访问的变量,确保线程间的可见性和有序性。 - **synchronized 关键字**:用于实现对共享资源...