`
嵇海波
  • 浏览: 13667 次
  • 性别: 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线程join方法使用方法

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

    Java线程.ppt

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

    java多线程Demo

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

    java 线程java 线程

    Java线程是Java编程语言中的一个核心概念,它允许程序同时执行多个任务,极大地提高了程序的并发性和效率。在Java中,线程是程序执行的最小单元,它们共享同一内存空间,可以并行运行,相互协作完成复杂的任务。Java...

    java线程实例 各种小Demo

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

    JAVA线程学习(源代码)

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

    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多线程的讲解和实战

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

    java线程精讲java线程精讲

    本文将深入探讨Java线程的相关知识点,帮助开发者理解并掌握Java线程的使用。 ### 1. 线程的创建 在Java中,有两种主要的线程创建方式: - **继承Thread类**:通过创建一个新的Thread类的子类,并重写它的`run()`...

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

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

    Java线程超时监控

    另外,`java.lang.Thread`类也提供了一种实现线程超时的方法,通过使用`join`方法。`join`可以等待某个线程结束,同时可以设置一个等待时限。 ```java Thread thread = new Thread(() -> { // 需要监控的线程代码 ...

    Java线程基础教程完整版

    Java线程是Java编程中的重要概念,它允许程序同时执行多个任务,从而提高了程序的效率和响应性。在Java中,线程是程序执行的最小单位,由Java虚拟机(JVM)管理。本教程将深入讲解Java线程的基础知识,帮助你掌握多...

    java多线程例子

    本文将通过三个实用的例子,讲解 Java 多线程的基本概念和使用方法。 第一个例子:创建多线程 在 Java 中,可以通过继承 Thread 类或实现 Runnable 接口来创建多线程。在第一个例子中,我们将继承 Thread 类来创建...

    JAVA 线程中启动线程

    在Java编程语言中,线程是程序执行的基本单元,它允许程序并发地执行多个任务。在多线程环境中,程序的...在编写`test`这样的示例时,你可以创建并启动线程,测试各种线程控制和同步方法,从而加深对Java线程的理解。

Global site tag (gtag.js) - Google Analytics