java多线程控制函数setDaemon,join,interupt

1、setDeamon

设置线程为后台运行的函数

public class SetDaemon
{
	public static void main(String[] args) throws InterruptedException
	{
		Thread tt=new Thread(new ThreadTest());
		tt.setDaemon(true);						//设置程序为后台运行
		tt.start();
		Thread.sleep(3);
	}
}

class ThreadTest implements Runnable
{
	public void run()
	{
		while(true)
		{
			System.out.println(Thread.currentThread().getName()+" is running...");
		}

	}
}

可见当父线程后台运行的线程自动结束。

2、join

强制CPU执行某个线程

public class SetDaemon
{
	public static void main(String[] args) throws InterruptedException
	{
		Thread tt=new Thread(new ThreadTest());
		tt.start();

		for(int i=0;i<10;i++)
		{
			if(i==5)
			{
				tt.join();
			}
			System.out.println(Thread.currentThread().getName()+i+" is running...");
		}
	}
}

class ThreadTest implements Runnable
{
	public void run()
	{
		for(int i=0;i<5;i++)
		{
			System.out.println(Thread.currentThread().getName()+i+" is running...");
		}

	}
}

3、interrupt

中断线程

public class SetDaemon
{
	public static void main(String[] args) throws InterruptedException
	{
		Thread tt=new Thread(new ThreadTest());
		tt.start();
		Thread.sleep(2000);
		System.out.println("The subthread is interupted in the main thread.");
		tt.interrupt();
		tt.join();
		System.out.println("The main thread is over.");
	}
}

class ThreadTest implements Runnable
{
	public void run()
	{
		try
		{
			System.out.println("The subthread is sleeping...");
			Thread.sleep(200000);
		}
		catch(Exception e)
		{
			e.printStackTrace();
			System.out.println("The subthread is interupted.");
			return;
		}
		System.out.println("The subthread is over.");
	}
}

注意:这里的线程中断和通常所讲的硬件中断并不是同一个概念,硬件中断是...(这个就不要讲啦),这里的中断可以理解成线程的状态被设置成了中断状态(即挂起了一个小旗,告诉其它线程‘哥处于中断状态’,禁止某些操作),此时执行某些函数会触发异常,被中断的线程进入到异常处理代码段。

请仔细体会以下代码:

public class SetDaemon
{
	public static void main(String[] args) throws InterruptedException
	{
		Thread tt=new Thread(new ThreadTest());
		tt.start();
		Thread.sleep(5);
		System.out.println("The subthread is interupted in the main thread.");
		tt.interrupt();
		tt.join();
		System.out.println("The main thread is over.");
	}
}

class ThreadTest implements Runnable
{
	public void run()
	{
		try
		{
			while(true)
			{
				System.out.println(Thread.currentThread().getName()+" is running...");
				Thread.sleep(1);
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
			System.out.println("The subthread is interupted.");
			return;
		}
		//System.out.println("The subthread is over.");
	}
}

可以使用isInterupt()查看线程是否被中断。

java多线程控制函数setDaemon,join,interupt

时间: 2024-10-12 22:22:56

java多线程控制函数setDaemon,join,interupt的相关文章

thread.join函数,java多线程中的join函数解析

join函数的作用,是让当前线程等待,直到调用join()的 线程结束或者等到一段时间,我们来看以下代码 1 package mian; 2 3 4 public class simpleplela { 5 static void threadMessage(String message) { 6 String threadName = 7 Thread.currentThread().getName(); 8 9 System.out.println(threadName+" "+m

Java 多线程之--- Thread.join介绍

许久许久没有写过博客了,以前上班总是没有时间,但是总感觉写博客还是很好的一种记录自己技术进程的一种方式 于是在辞职后来到北软,又一次上学了,又一次有时间来写博客了,所以再次开始写博客了,呵呵,再次当学生的感觉 真好!!!! 这次说的是Thread的join方法,以前总是使用他的run和sleep方法,哪两个都是比较清楚的,对于这个join方法,他的 主要功能就是,当你在一个方法里面调用其他的线程的时候,如果使用了类似thread1.join(),这样的话,这个调用的线程 就开始一直等待threa

Java多线程中的join方法

新建一个Thread,代码如下: 1 package com.thread.test; 2 3 public class MyThread extends Thread { 4 private String name; 5 public MyThread(String name) { 6 this.name = name; 7 } 8 @Override 9 public void run() { 10 for (int i = 0; i < 100; i++) { 11 System.out.

java 多线程8(join)

join():  加入.一个线程如果执行了join语句,那么就有新的线程加入,执行该语ij 句的线程必须要让步给新加入的线程先完成任务,然后才能继续执行. import java.util.Scanner; import static sun.misc.Version.print; public class EX10 { public static void main(String[] args) { Mom m = new Mom(); m.run();//不用调run 吗?他们两个为什么 /

Java多线程之~~~Fork/Join框架的同步和异步

在Fork/Join框架中,提交任务的时候,有同步和异步两种方式.以前使用的invokeAll()的方法是同步的,也就是任 务提交后,这个方法不会返回直到所有的任务都处理完了.而还有另一种方式,就是使用fork方法,这个是异步的.也 就是你提交任务后,fork方法立即返回,可以继续下面的任务.这个线程也会继续运行. 下面我们以一个查询磁盘的以log结尾的文件的程序例子来说明异步的用法. package com.bird.concursey.charpet8; import java.io.Fil

java多线程wait notify join

wait notify 几个注意点: wait 与 notify/notifyAll 方法必须在同步代码块中使用,即要先对调用对象加锁. 当线程执行wait()时,会把当前的锁释放,然后让出CPU,进入等待状态. 当执行notify/notifyAll方法时,会唤醒一个处于等待该 对象锁 的线程,然后继续往下执行,直到执行完退出对象锁锁住的区域(synchronized修饰的代码块)后再释放锁. 从这里可以看出,notify/notifyAll()执行后,并不立即释放锁,而是要等到执行完临界区中

java多线程16:join()的使用

讲解join()方法之前请确保对于即wait()/notify()/notifyAll()机制已熟练掌握.可以参考前面的笔记 join()方法的作用是等待线程销毁.join()方法反应的是一个很现实的问题,比如main线程的执行时间是1s,子线程的执行时间是10s,但是主线程依赖子线程执行完的结果,这时怎么办?可以像生产者/消费者模型一样,搞一个缓冲区,子线程执行完把数据放在缓冲区中,通知main线程,main线程去拿,这样就不会浪费main线程的时间了.另外一种方法,就是join()了. jo

java 多线程2:Thread的实例方法

Thread类中的方法调用方式: 学习Thread类中的方法是学习多线程的第一步.在学习多线程之前特别提出一点,调用Thread中的方法的时候,在线程类中,有两种方式,一定要理解这两种方式的区别: 1.this.XXX() 和 线程对象实例.XXX() 这里要首先参考 多线程 Thread.currentThread().getName() ,对象实例.getName() 和 this.getName()区别 理解采用Thread继承实现线程的几种启动方式出现的问题 这种调用方式表示的线程是线程

java多线程中join用法

thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B. package com.wzs; /** * Java多线程中join用法 * * @author Administrator * */ public class JoinTest { public static void main(String[] args) { BThread bThread = new B