`
嵇海波
  • 浏览: 14065 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

JAVA线程join用法

 
阅读更多
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用法总结.pdf

    以上就是对Java线程中wait、await、sleep、yield、join用法的总结。这些方法在实际开发中,对于控制多线程运行的时序和协调非常关键。理解这些方法的正确使用方式是掌握Java并发编程的基础。同时,使用时需特别注意...

    浅谈java线程join方法使用方法

    浅谈Java线程join方法使用方法 Java中的线程join方法是一种实现线程同步的方式,可以将原本并行执行的多线程方法变成串行执行的。在Java中,线程join方法的作用是使当前线程等待另一个线程的结束,然后再继续执行...

    Java线程之join_动力节点Java学院整理

    Java线程中的`join()`方法是一个非常重要的同步工具,它允许一个线程(通常为主线程)等待另一个线程(子线程)执行完成后再继续执行。`join()`方法定义在`java.lang.Thread`类中,它使得多线程间的协作更加有序。 ...

    java线程使用教程

    ### Java线程使用教程知识点详解 #### 一、线程基础概述 - **定义与特点**:线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中...希望本教程能帮助读者更好地理解和掌握Java线程的使用方法。

    Java线程.ppt

    `start()`方法启动线程,`sleep()`方法让线程进入堵塞状态,`join()`方法等待线程执行完成,`yield()`方法让当前线程让出CPU,`stop()`方法停止线程(不推荐使用,因为可能引起数据不一致),`interrupt()`方法中断...

    java多线程Demo

    Java线程有10个优先级(MIN_PRIORITY, NORM_PRIORITY, MAX_PRIORITY),默认优先级是NORM_PRIORITY。但是,线程优先级并不保证绝对的执行顺序,操作系统调度策略可能影响实际执行顺序。 7. join()方法: 一个线程...

    java线程实例 各种小Demo

    Java线程是多任务编程的重要概念,它允许程序同时执行多个独立的任务,从而提高系统效率和响应速度。在Java中,线程可以分为用户线程和守护线程,前者是程序运行的基础,而后者是在所有用户线程结束时才终止的后台...

    Java线程 高级使用

    通过以上内容的学习,读者可以深入了解Java线程的高级使用方法,掌握如何在Java程序中高效地管理和控制线程,以及如何解决多线程环境下常见的问题。这对于开发高性能、高可用性的Java应用至关重要。

    JAVA线程学习(源代码)

    本资源"JAVA线程学习(源代码)"提供了关于Java线程的源代码示例,帮助我们深入理解和实践线程的使用。 首先,我们要理解Java中的线程模型。Java线程由`java.lang.Thread`类或`java.util.concurrent.Executor`框架来...

    java线程入门级书籍

    #### 二、Java线程的使用场景 **2.1 提高用户界面响应速度** 在使用Swing等GUI库时,事件驱动的用户界面需要一个专门的事件线程来处理用户的输入。如果某个事件处理函数(如事件监听器)执行时间过长,会导致用户...

    java线程文档大全

    Java线程是多任务编程中的核心概念,它允许程序同时执行多个不同的任务,极大地提高了程序的效率和响应性。在Java中,线程是通过Java.lang.Thread类或实现Runnable接口来创建和管理的。这份“java线程文档大全”包含...

    java线程.rar

    Java线程是Java编程语言中的一个核心概念,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,线程是通过类`Thread`或实现`Runnable`接口来创建和管理的。Java线程模型是基于操作系统的原生...

    java多线程经典案例

    阻塞状态通常发生在线程等待I/O操作完成、调用sleep()方法、等待锁释放或者调用join()方法等待其他线程结束时。 在`threadTest`这个案例中,我们可能会看到如何使用这些概念来创建实际的应用场景。例如,一个典型的...

    Java线程学习和总结

    本文将深入探讨Java线程的核心概念、API以及在实际开发中的应用,旨在帮助你理解和掌握这一关键技能。 首先,我们需要了解什么是线程。在单核CPU系统中,线程是操作系统调度的基本单位,而在多核CPU系统中,每个...

    java 线程方法join简单用法实例总结

    主要介绍了java 线程方法join简单用法,结合实例形式总结分析了Java线程join方法的功能、原理及使用技巧,需要的朋友可以参考下

    Java线程中yield与join方法的区别Java开发J

    在Java多线程编程中,理解并正确使用`yield`和`join`方法是至关重要的。这两个方法都属于线程控制策略的一部分,但它们的作用和使用场景有所不同。 首先,我们来详细探讨`Thread.yield()`方法。这个方法的目的是让...

    Java多线程知识点总结

    Java提供了多种机制来保证线程安全,比如使用synchronized关键字来同步方法或代码块,实现线程之间的同步。当一个线程试图进入一个已经被另一个线程持有的同步代码块时,它将进入阻塞状态,直到同步代码块的执行线程...

    java多线程的讲解和实战

    - `join()`方法:让当前线程等待另一个线程完成其执行。 4. **线程优先级与调度**:Java的`Thread`类提供了设置线程优先级的方法,如`setPriority(int priority)`,但实际线程调度依赖于操作系统的策略,优先级并...

    一个线程join另一个线程,(包括和interrupt互动的用法)1---马克-to-win java视频

    一个线程join另一个线程,(包括和interrupt互动的用法)1---马克-to-win java视频

    Java线程 学习

    - **join() 方法**:一个线程可以使用`join()`方法等待另一个线程结束。 - **volatile 关键字**:用于标记可能被多个线程访问的变量,确保线程间的可见性和有序性。 - **synchronized 关键字**:用于实现对共享资源...

Global site tag (gtag.js) - Google Analytics