java實現三個執行緒A B C,A執行緒列印A之後才能B執行緒列印B,然後接著C執行緒執行列印C,繼而迴圈下去
阿新 • • 發佈:2019-01-02
最近看到有人提問這個問題,而且好多人又是轉載的,寫了一大堆,看的我頭都大了。於是自己做了個小程式輕鬆解決。
附上程式碼:
package pcitc;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class MyThread implements Runnable{
final Lock locks = new ReentrantLock();
private String name;
public MyThread(String name) {
super();
this.name = name;
}
@Override
public void run() {
try {
locks.lock();
for (int i = 0; i < 5; i++) {
System.out.println("執行緒" + name);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
locks.unlock();
}
}
public static void main(String[] args) {
try {
MyThread A = new MyThread("A");
MyThread B = new MyThread("B");
MyThread C = new MyThread("C");
Thread threadA = new Thread(A);
Thread threadB = new Thread(B);
Thread threadC = new Thread(C);
threadA.start();
threadA.sleep(3);
threadB.start();
threadB.sleep(3);
threadC.start();
threadC.sleep(3);
} catch (Exception e) {
e.printStackTrace();
}
}
}
注:如果你嘗試打斷點進行跟蹤,那麼,很遺憾,你會獲取不到相應的結果。必須直接執行。
其實這就是個給執行緒加鎖的過程。很多人,想必都聽說過synchronized關鍵字,這裡所用到的是java.util.concurrent.locks包下的ReenTrantLock類,顧名詞義,就是個鎖,不同的是,它的鎖可以手動控制。個人不喜歡synchronized,因為寫起來具有侷限性。以上只是一個很簡單的例子就可以解決。但是實際開發真正遇到高併發量的情況下,那麼問題就來了,你要想著如何去提高效率。以後,我會在微博中慢慢提到。
這是我的第一篇文章,讓我微不足道的幫助與您一同成長。
附上程式碼:
package pcitc;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class MyThread implements Runnable{
final Lock locks = new ReentrantLock();
private String name;
public MyThread(String name) {
super();
this.name = name;
}
@Override
public void run() {
try {
locks.lock();
for (int i = 0; i < 5; i++) {
System.out.println("執行緒" + name);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
locks.unlock();
}
}
public static void main(String[] args) {
try {
MyThread A = new MyThread("A");
MyThread B = new MyThread("B");
MyThread C = new MyThread("C");
Thread threadA = new Thread(A);
Thread threadB = new Thread(B);
Thread threadC = new Thread(C);
threadA.start();
threadA.sleep(3);
threadB.start();
threadB.sleep(3);
threadC.start();
threadC.sleep(3);
} catch (Exception e) {
e.printStackTrace();
}
}
}
注:如果你嘗試打斷點進行跟蹤,那麼,很遺憾,你會獲取不到相應的結果。必須直接執行。
其實這就是個給執行緒加鎖的過程。很多人,想必都聽說過synchronized關鍵字,這裡所用到的是java.util.concurrent.locks包下的ReenTrantLock類,顧名詞義,就是個鎖,不同的是,它的鎖可以手動控制。個人不喜歡synchronized,因為寫起來具有侷限性。以上只是一個很簡單的例子就可以解決。但是實際開發真正遇到高併發量的情況下,那麼問題就來了,你要想著如何去提高效率。以後,我會在微博中慢慢提到。
這是我的第一篇文章,讓我微不足道的幫助與您一同成長。