javaSE-多线程停止

停止线程

定义循环结束标记
因为线程运行代码一般都是循环,只要控制了循环即可。
使用interrupt(中断)方法。从冻结状态恢复到运行状态  不要根据单词词义想
该方法是结束线程的冻结状态,使线程回到运行状态中来。
注:stop方法已经过时不再使用。
class StopThread implements Runnable
{
	private boolean flag = true;
	public synchronized void run ()
	{
		/*
		线程任务中必然需要定义循环语句。
		只要定义变量控制住循环。就可以控制线程的结束。
		*/
		while(flag)
		{
			try
			{
				wait();//如果线程被等待,是无法继续判断标记的。
			}
			catch (InterruptedException e)
			{
				System.out.println(Thread.currentThread().getName()+".......Exception");
				flag = false;
			}
			System.out.println(Thread.currentThread().getName()+"......run");
		}
	}

	public void setFlag()
	{
		flag = false;
	}

}



class StopThreadDemo 
{
	public static void main(String[] args) 
	{
		StopThread st = new StopThread();

		Thread t1 = new Thread(st);
		Thread t2 = new Thread(st);
		t1.start();
		t2.setDaemon(true);//将t2标记成守护线程(后台线程)
		t2.start();
		int num = 0;

		while(true)
		{
			if(num++ == 50)
			{
//				st.setFlag();//当条件满足时,将线程任务中的标记改为false。让线程停止。
				//对t1进行一次中断,意思是将t1的冻结状态清除。让其恢复执行资格。
				t1.interrupt();
//				t2.interrupt();
				break;
			}
			System.out.println(Thread.currentThread().getName()+"....."+num);
		}

		System.out.println("over");
		
	}
}


线程类的其他方法

setPriority(int num)设置线程的优先级
setDaemon(boolean b)(用户线程/守护线程)其他类线程结束守护线程自动结束
join()
自定义线程名称
toString()

class Demo implements Runnable
{
	private String name;
	Demo(String name)
	{
		this.name = name;
	}	
	public void run()
	{
		for(int x=0; x<40; x++)
		{
			System.out.println(Thread.currentThread().getName()+"...."+x+"...."+name);
			Thread.yield();
		}
	}
}


class ThreadDemo_Join 
{
	public static void main(String[] args) throws Exception
	{
		Demo d1  = new Demo("小强");
		Demo d2  = new Demo("旺财");

		Thread t1 = new Thread(d1);
		Thread t2 = new Thread(d2);

		t1.start();

		//调用了t1.join();方法。

		t2.start();
		t1.join();//主线程等待t1线程终止。

	
		/*for(int x=0; x<20; x++)
		{
			System.out.println("main......"+x);
		}
		*/

	}
}


你可能感兴趣的:(javaSE)