日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

多线程综合小案例

發布時間:2025/3/21 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多线程综合小案例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

手寫Callable與FutureTask模式

可以基于Callable+FutureTask可以實現異步線程執行 帶返回結果。
LockSupport實現方式

定義Callable+FutureTask

public interface MayiktCallable {
V call();
}
public class MayiktFutureTask implements Runnable {
private MayiktCallable mayiktCallable;
private Thread cuThread;
private V result;

public MayiktFutureTask(MayiktCallable mayiktCallable) {this.mayiktCallable = mayiktCallable; }@Override public void run() {// 獲取到mayiktCallable 執行返回結果result = mayiktCallable.call();// 如果 call方法執行完畢 則喚醒當前阻塞的線程if (cuThread != null)LockSupport.unpark(cuThread); }/*** 調用get方法 當前線程就會阻塞。*/ public V get() {cuThread = Thread.currentThread();// 阻塞當前線程LockSupport.park();return result; }

}

MayiktCallable mayiktCallable = new MayiktCallableImpl();
MayiktFutureTask futureTask = new MayiktFutureTask(mayiktCallable);
new Thread(futureTask).start();
Integer result = futureTask.get();
System.out.println(Thread.currentThread().getName() + result);

wait()與notify
public class MayiktFutureTask implements Runnable {
private MayiktCallable mayiktCallable;
private Thread cuThread;
private V result;
private Object lock = new Object();

public MayiktFutureTask(MayiktCallable mayiktCallable) {this.mayiktCallable = mayiktCallable; }@Override public void run() {// 獲取到mayiktCallable 執行返回結果result = mayiktCallable.call();// 如果 call方法執行完畢 則喚醒當前阻塞的線程if (cuThread != null)synchronized (lock) {lock.notify();} }/*** 調用get方法 當前線程就會阻塞。*/ public V get() {cuThread = Thread.currentThread();synchronized (lock) {try {// 當前線程釋放鎖 變為阻塞狀態lock.wait();} catch (Exception e) {}}return result; }

}

總結

以上是生活随笔為你收集整理的多线程综合小案例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。