停止线程
定义循环结束标记
因为线程运行代码一般都是循环,只要控制了循环即可。
使用interrupt(中断)方法。从冻结状态恢复到运行状态 不要根据单词词义想
该方法是结束线程的冻结状态,使线程回到运行状态中来。
注:stop方法已经过时不再使用。
因为线程运行代码一般都是循环,只要控制了循环即可。
使用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()
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);
}
*/
}
}