線程的操作方法
阿新 • • 發佈:2019-04-06
事務 ati one executors 不能 override 之前 lis ray
線程的操作方法
嘿嘿!這裏比較重復麻煩奧~~~ 我該怎麽水過這篇博客
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();不過這個似乎沒多少用,我就不解釋了,想要了解的話就搜別人的博客看吧 )拜拜!~!~!~
線程的操作方法