线程的操作方法
嘿嘿!这里比较重复麻烦奥~~~ 我该怎么水过这篇博客
1.线程休眠
sleep()方法指定一个参数用于该线程的休眠时间,要加异常处理,线程醒来后并不能保证立刻进入运行状态,只能保证它进入就绪状态。
代码:
try { sleep(1000);} catch (InterruptedException e) { e.printStackTrace();}
2.线程加入
当某个线程使用join()方法加入到另一个线程中时,另一个线程会等待这个空降兵执行完毕之后再继续执行。
举个例子,线程加入一般是这样的情况:主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束。
但是如果主线程处理完其他的事务后,需要用到子线程的处理结果,也就是主线程需要等待子线程执行完成之后再结束,这个时候就要用到join()方法了。
代码:提醒大家一下,这个就休眠时间啊真的是一门学问奥。
station.java
package com;public class station extends Thread { int ticket=10;//票数 static Object lock="locked"; boolean node = true; public station(String name) { super(name); } @Override public void run() { super.run(); while(ticket>0) { synchronized(lock) { if(ticket>0) { System.out.println(getName()+"卖出第"+ticket+"张票"); --ticket; if(ticket==5&&node) { try { Thread.sleep(1000); Thread addticket = new Thread(new Runnable() { @Override public void run() { add(); System.out.println("补票了"); } }); addticket.join(); addticket.start(); Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } }else { System.out.println("票卖完了"); } }// try {// sleep(1000);// } catch (InterruptedException e) {// e.printStackTrace();// } } } public void add() { ticket+=6; node=false; }}
App.java
package com;import java.util.ArrayList;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;public class App { public App() throws InterruptedException, ExecutionException { s1.start();//启动 } public static void main(String[] args) throws InterruptedException, ExecutionException { new App(); }}
3.线程中断
现在已经不用stop();了。现在提倡再run()方法中使用无限循环然后用boolean标记控制循环的终止。
代码:
boolean isContinue = true; public void run() { while(true) { .......... .......... .......... if(isContinue)//布尔值 break; } } private void setContinue() { this.continue = false; }
4.线程礼让( yield();不过这个似乎没多少用,我就不解释了,想要了解的话就搜别人的博客看吧 )拜拜!~!~!~