多线程中使用到的小方法

interrupt方法:

在多线程中如果想停止某个线程应该怎么做?以前的java是使用stop方法去实现该功能,但是stop方法已过时,在新版的java中甚至不能使用stop函数了。那该如何解决线程停止问题呢?从原理上去思考,如果一个线程执行完run方法是不是就自行结束了?而阻止run方法结束只有一种可能,那就是循环,只要控制run方法中的循环,就能让run方法结束,从而线程也结束,要想达到该目的,只要加一个控制循环的标记即可,例如flag,但是还有一种可能,那就是在循环过程中线程被冻结,也就是说线程无法通过判断flag来结束,这时,就要用到interrupt方法,在其他线程中使用线程名.interrupt()后,该线程若冻结就会强制解冻,并在冻结处抛出InterruptedException异常,在实际编程中,常常用try-catch来捕获异常,并在处理中修改flag,从而使得run方法结束,线程也就结束。

import java.util.concurrent.locks.*;
class MyThread implements Runnable
{
	Lock lock=new ReentrantLock();
	Condition c=lock.newCondition();
	boolean flag=true;
	int count=0;
	public void run()
	{
		lock.lock();
		while(flag)
		{
			System.out.println(Thread.currentThread().getName()+"____run");
			try
			{
				c.await();
			}
			catch(Exception e)
			{
				System.out.println(Thread.currentThread().getName()+"____interrupted");
				flag=false;
			}
			if(60==count++)
				flag=false;
		}
		lock.unlock();
	}
}
class InterruptedDemo 
{
	public static void main(String[] args) 
	{
		MyThread t=new MyThread();
		Thread t1=new Thread(t);
		Thread t2=new Thread(t);
		t1.start();
		t2.start();	
		t1.interrupt();
		t2.interrupt();
	}
}
//如果不用interrupt,两线程都会冻结在try语句中,不会执行catch


===============================================================================================================================

setDaemon方法:

用来定义守护线程,所谓守护线程就是,当非守护线程都结束后,该线程也会自动结束的线程,举个例子,一个具有数据输入和数据同步输出功能的机器,若输入结束了,输出功能已经没有意义了,也应该随之结束,所以可以把输出的线程定义为守护线程。

使用方法:在线程开启前加上   线程名.setDaemon(true);   即可。

当剩下的线程均为守护线程时,守护线程自动结束。

===============================================================================================================================

join方法:

当A线程在B线程中调用join方法时,当B线程执行到该语句时,B线程冻结,直到A线程结束后,B线程才自动解冻

调用方法:A.join();

===============================================================================================================================

setPriority方法:

用来修改线程的优先级,优先级越高的线程获得执行权的概率越大,等级从1到10,java中定义了三个常量MAX_PRIORITY=10,MIN_PRIORITY=1,NORM_PRIORITY=5

使用方法:线程名.setPriority(等级);

===============================================================================================================================

yield方法:

使用格式:Thread.yield();

效果,当线程执行到该语句时,会把当前手中的执行权让出来,不过该线程有可能自己抢回来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值