Callable的简单使用
生活随笔
收集整理的這篇文章主要介紹了
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的简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js取整、四舍五入等数学函数
- 下一篇: mui框架中dialog框的实现