java多線程六:多線程案例分析三-競爭搶答

文章出處 https://www.jianshu.com/p/e73cf865fc2d

文章對應視頻出處:https://developer.aliyun.com/course/1012?spm=5176.10731542.0.0.6ef2d290hxQ4g0

設計一個競拍搶答程序:要求設計三個搶答者(三個線程),而後同時發出搶答指令,搶答成功者給出成功提示,未搶答成功者給出失敗提示。
  對於這個多線程操作,由於裏面涉及到數據返回問題,最好使用Callable實現。

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
public class ThreadDemo {
    public static void main(String[] args) throws Exception {
        MyThread mt = new MyThread();
        FutureTask<String> taskA = new FutureTask(mt);
        FutureTask<String> taskB = new FutureTask(mt);
        FutureTask<String> taskC = new FutureTask(mt);
        new Thread(taskA, "A").start();
        new Thread(taskB, "B").start();
        new Thread(taskC, "C").start();
        System.out.println(taskA.get());
        System.out.println(taskB.get());
        System.out.println(taskC.get());
    }
}
class MyThread implements Callable<String> {
    private boolean flag = false;//搶到處理
    @Override
    public String call() throws Exception {
        synchronized (this) {//數據同步
            if (this.flag == false) {//搶答成功
                this.flag = true;
                return Thread.currentThread().getName() + "搶答成功!";
            } else {
                return Thread.currentThread().getName() + "搶答失敗!";
            }
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章