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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Callable的简单使用

發布時間:2025/5/22 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Callable的简单使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

說起java的線程操作,都會想到Thread和Runable這兩個, 這兩個類可以實現異步和同步. 在大多數的java開發中, 這兩個都是實現異步的線程來使用,

但是現在考慮一種情況: 發出一條線程, 但是得等待這條線程返回結果后, 我們再去發另一個線程. (讀者肯定會想到用線程的同步機制做處理)?

下面介紹Callable的使用, 也是最近一段時間才學到的新技能, 在這里記錄一下。(我的理解就是: Callable是串聯級別的線程)

簡單介紹一下Callable:

1. Callable和Runnbale一樣代表著任務,區別在于Callable有返回值并且可以拋出異常

2.?Future是一個接口,代表了一個異步計算的結果(下面代碼看什么是Future)。接口中的方法用來檢查計算是否完成、等待完成和得到計算的結果。當計算完成后,只能通過get()方法得到結果,get方法會阻塞直到結果準備好了。如果想取消,那么調用cancel()方法。其他方法用于確定任務是正常完成還是取消了。一旦計算完成了,那么這個計算就不能被取消

package testJava;import java.io.DataOutputStream; import java.net.ConnectException; import java.net.HttpURLConnection; import java.net.URL; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future;public class CallableTest {final int ThreadPoolSize = 30;ExecutorService executorService;
  // 在外面只要調用sendRequest()這個方法就可以了
public boolean sendRequest() {boolean result =false;try {executorService = Executors.newFixedThreadPool(ThreadPoolSize);
       // 這里就是調用Callable的使用方法, 用get得到返回的結果 Future tvFuture
= executorService.submit(new TestCallable("192.168.0.11", 80));result = (boolean) tvFuture.get(); } catch (Exception e) {System.out.println(e.getMessage());}return result;}class TestCallable implements Callable {private String ip;private int port;public TestCallable(String ip, int port){this.ip = ip;this.port = port;}@Overridepublic Object call() throws Exception {// TODO Auto-generated method stubreturn testCall(ip, port);} }private boolean testCall(String ip, int port) {boolean result = false;try {URL url = new URL("http://" + ip + ":" + port + "/WIXP");String data = "testData";HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("POST");connection.setConnectTimeout(20*1000);connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");connection.setRequestProperty("Content-Length", ""+ Integer.toString(data.getBytes().length));connection.setRequestProperty("Content-Language", "en-US");connection.setUseCaches(false);connection.setDoInput(true);connection.setDoOutput(true);try (DataOutputStream wr = new DataOutputStream(connection.getOutputStream());) {wr.writeBytes(data);wr.flush();} catch (ConnectException e) {System.out.println(e.getMessage());} catch (Exception e) {System.out.println(e.getMessage());}if (connection.getResponseCode() == 200) { result = true;}} catch (Exception e) {System.out.println(e.getMessage());}return result;}}

?

轉載于:https://www.cnblogs.com/xumBlog/p/9499292.html

總結

以上是生活随笔為你收集整理的Callable的简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。

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