本文实例讲述了Java实现指定线程执行顺序的三种方式。分享给大家供大家参考,具体如下:
<强>方法一:通过共享对象锁加上可见变量来实现。强>
公开课MyService { 私人波动int orderNum=1; 公共同步空白methodA () { 尝试{ 而(orderNum !=1) { wait (); } for (int i=0;我& lt;2;我+ +){ System.out.println(“五星级”); } orderNum=2; notifyAll (); }捕捉(InterruptedException e) { e.printStackTrace (); } } 公共同步空白methodB () { 尝试{ 而(orderNum !=2) { wait (); } for (int i=0;我& lt;2;我+ +){ System.out.println (“BBBBB”); } orderNum=3; notifyAll (); }捕捉(InterruptedException e) { e.printStackTrace (); } } 公共同步空白methodC () { 尝试{ 而(orderNum !=3) { wait (); } for (int i=0;我& lt;2;我+ +){ System.out.println (“CCCCC”); } orderNum=1; notifyAll (); }捕捉(InterruptedException e) { e.printStackTrace (); } } } >之前进口service.MyService; 公共类ThreadAA扩展线程{ 私人MyService dbtools; 公共ThreadAA (MyService dbtools) { 超级(); 这一点。dbtools=dbtools; } @Override 公共空间run () { dbtools.methodA (); } } >之前进口service.MyService; 公共类ThreadBB扩展线程{ 私人MyService dbtools; 公共ThreadBB (MyService dbtools) { 超级(); 这一点。dbtools=dbtools; } @Override 公共空间run () { dbtools.methodB (); } } >之前进口service.MyService; 公共类ThreadCC扩展线程{ 私人MyService dbtools; 公共ThreadCC (MyService dbtools) { 这一点。dbtools=dbtools; } @Override 公共空间run () { dbtools.methodC (); } } >之前进口extthread.ThreadCC; 进口service.MyService; 进口extthread.ThreadAA; 进口extthread.ThreadBB; 公共类运行{ 公共静态void main (String [] args) { MyService MyService=new MyService (); for (int i=0;我& lt;2;我+ +){ ThreadBB输出=new ThreadBB (myService); output.start (); ThreadAA输入=new ThreadAA (myService); input.start (); ThreadCC ThreadCC=new ThreadCC (myService); threadCC.start (); } } } >之前执行结果:
可以看到线程的启动按顺序执行了。共享对象锁,可以保证每个方法只能同时有一个线程进入,配合等和notifyall方法,可以启动或者唤醒线程。
<强>方法二:通过主线程加入()强>
类T11扩展线程{ 公共空间run () { 系统。println(“在T1); } } 类T22延伸线程{ 公共空间run () { 系统。println(“在T2); } } 类T33扩展线程{ 公共空间run () { 系统。println(“在T3); } } 公开课Test2 { 公共静态void main (String [] args)抛出InterruptedException { T11 t1=new T11 (); T22 t2=new T22 (); T33 t3=new T33 (); t1.start (); t1.join (); t2.start (); t2.join (); t3.start (); } } >之前<强>方法三:通过线程执行时加入()强>
类T1延伸线程{ 公共空间run () { 随机随机=new随机(); 尝试{ thread . sleep (random.nextInt (1000)); }捕捉(InterruptedException e) { e.printStackTrace (); } 系统。println(“在T1); } } 类T2延伸线程{ 私人线程的线程; 公共T2(线程的线程){ 这一点。线程=线程; } 公共空间run () { 尝试{ thread.join (); }捕捉(InterruptedException e) { e.printStackTrace (); } 系统。println(“在T2); } } 类T3延伸线程{ 私人线程的线程; 公共T3(线程的线程){ 这一点。线程=线程; } 公共空间run () { 尝试{ thread.join (); }捕捉(InterruptedException e) { e.printStackTrace (); } 系统。println(“在T3); } } 公共类测试{ 公共静态void main (String [] args)抛出InterruptedException { T1 T1=new T1 (); T2 T2=new T2 (t1); T3 T3=new T3 (t2); t2.start (); t1.start (); t3.start (); } }Java实现指定线程执行顺序的三种方式示例