可以通过线程的方法进行基本的线程控制,除了已知的start、run、sleep方法外还有isAlive、currentThread、interrupt方法。
isAlive:该方法用来测试线程是否处于活动状态。线程由start方法启动后,直至被终止之间的任何时刻都处于Alive状态。当处于新建状态和死亡状态时,该方法返回false。
currentThread:该方法是Thread类的的类方法,返回正在使用CPU资源的线程。
interrupt:当线程处于休眠状态时,一个占有CPU资源的线程可以让休眠的线程调用interrupt方法唤醒自己,导致休眠的线程发生InterruptedException异常结束休眠,重新排队等待CPU资源。
class A implements Runnable{ Thread student,teacher; A(){ teacher=new Thread(this,"王教授"); student=new Thread(this,"张三"); } public void run(){ if(Thread.currentThread()==student){ try{ System.out.println(student.getName()+"正在睡觉,不听课"); Thread.sleep(1000*60*60); }catch(InterruptedException e){ System.out.println(student.getName()+"被老师叫醒了"); } } else if(Thread.currentThread()==teacher){ for(int i=1;i<=3;i++){ System.out.println("上课!"); }try{ Thread.sleep(500); }catch(InterruptedException e){} student.interrupt(); } } } public class BasicControlThread{ public static void main(String args[]){ A a=new A(); a.student.start(); a.teacher.start(); } }
此外还有stop和join方法
stop():通过调用线程的实例方法stop()来终止线程,终止后即进入死亡状态,不能再被调度。
join():一个线程在占有CPU资源期间,可以让其他线程调用join()方法和本线程联合。当前线程等待调用该方法线程结束后,再重新排队等待CPU资源,以便恢复执行。
class TV{ float price; String name; TV(String name,float price){ this.price=price; this.name=name; } } class ThreadJoin implements Runnable{ TV tv; Thread customer,tvMaker; ThreadJoin(){ customer=new Thread(this,"顾客"); tvMaker=new Thread(this,"电视制造商"); } public void run(){ if(Thread.currentThread()==customer){ System.out.println(customer.getName()+"等"+tvMaker.getName()+"生产电视机"); try{ tvMaker.join();//线程customer开始等待tvMaker结束 }catch(InterruptedException e){ } System.out.println(customer.getName()+"买了一台电视机"+tv.name+"价格:"+tv.price); } else if(Thread.currentThread()==tvMaker){ System.out.println(tvMaker.getName()+"开始生产电视机..."); try{ tvMaker.sleep(2000); }catch(InterruptedException e){ } tv=new TV("长虹牌",4500); System.out.println(tvMaker.getName()+"生产完毕!!!"); } } } public class JoinThread{ public static void main(String args[]){ ThreadJoin th=new ThreadJoin(); th.customer.start(); th.tvMaker.start(); } }
时间: 2024-10-12 03:23:40