成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

異步j(luò)ava代碼,java異步執(zhí)行代碼

如何用JAVA實(shí)現(xiàn)異步信息處理

通常同步意味著一個(gè)任務(wù)的某個(gè)處理過(guò)程會(huì)對(duì)多個(gè)線程在用串行化處理,而異步則意味著某個(gè)處理過(guò)程可以允許多個(gè)線程同時(shí)處理。異步通常代表著更好的性能,因?yàn)樗艽蟪潭壬弦蕾囉诰彌_,是典型的使用空間換時(shí)間的做法,例如在計(jì)算機(jī)當(dāng)中,高速緩存作為cpu和磁盤(pán)io之間的緩沖地帶協(xié)調(diào)cpu高速計(jì)算能力和磁盤(pán)的低速讀寫(xiě)能力。

十余年的大埔網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營(yíng)銷型網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整大埔建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)從事“大埔網(wǎng)站設(shè)計(jì)”,“大埔網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

(1):重新啟動(dòng)一個(gè)java程序就啟動(dòng)了一個(gè)進(jìn)程

可以用操作系統(tǒng)命令行啟動(dòng) Runtime.getRuntime().exec("java -classpath . XXX");

(2):可不可以在接收消息的模塊中的addtolist函數(shù)中添加一個(gè)專門(mén)的處理函數(shù),函數(shù)執(zhí)行時(shí)先向list中添加消息,然后探測(cè)當(dāng)前有沒(méi)有處理線程,如果沒(méi)有,則啟動(dòng)線程。

(3):想省點(diǎn)工作,可以用BlockingQueue來(lái)代替list,這樣線程等待和喚醒不用寫(xiě)代碼實(shí)現(xiàn)了,如果非要用list,那么就做好同步

list的小例子:

Java codeclass MessageConsumer extends Thead { ? ?private ListYourMessageType list; ? ?private boolean running = true; ? ?public MessageConsumer(ListYourMessageType list) {this.list = list;} ? ?public void run() { ? ? ? ?while (running) { ? ? ? ? ? ?YourMessageType msg = null; ? ? ? ? ? ? try { ? ? ? ? ? ? ? ?synchronized(list) { ? ? ? ? ? ? ? ? ? ?while (list.size() == 0) { ? ? ? ? ? ? ? ? ? ? ? ?list.wait(); ? ? ? ? ? ? ? ? ? ?} ? ? ? ? ? ? ? ? ? ?msg = list.remove(0); ? ? ? ? ? ? ? ? ? ?list.notiryAll(); ? ? ? ? ? ? ? ?} ? ? ? ? ? ?} catch (Exception e) { ? ? ? ? ? ? ? ?e.printStackTrace(); ? ? ? ? ? ?} ? ? ? ? ? ?if (msg == null) continue; ? ? ? ? ? ?//System.out.println(msg); //print message ? ? ? ?} ? ?}}//調(diào)用sampleclass ShareModule { ? ?ListYourMessageType list = new ArrayListYourMessageType(); ? ?...}public class Main { ? ?public static void main(String[] args) { ? ? ? ?ShareMudule sm; //so on ? ? ? ?... ? ? ? ?Thread t = new MessageConsumer(sm.list); ? ? ? ?t.start(); ? ? ? ?... ? ?}}

java 異步調(diào)用方法

1. 使用wait和notify方法

這個(gè)方法其實(shí)是利用了鎖機(jī)制,直接貼代碼:

public class Demo1 extends BaseDemo{ private final Object lock = new Object(); @Override public void callback(long response) { System.out.println("得到結(jié)果"); System.out.println(response); System.out.println("調(diào)用結(jié)束"); synchronized (lock) { lock.notifyAll(); } } public static void main(String[] args) { Demo1 demo1 = new Demo1(); demo1.call(); synchronized (demo1.lock){ try { demo1.lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("主線程內(nèi)容"); } }

可以看到在發(fā)起調(diào)用后,主線程利用wait進(jìn)行阻塞,等待回調(diào)中調(diào)用notify或者notifyAll方法來(lái)進(jìn)行喚醒。注意,和大家認(rèn)知的一樣,這里wait和notify都是需要先獲得對(duì)象的鎖的。在主線程中最后我們打印了一個(gè)內(nèi)容,這也是用來(lái)驗(yàn)證實(shí)驗(yàn)結(jié)果的,如果沒(méi)有wait和notify,主線程內(nèi)容會(huì)緊隨調(diào)用內(nèi)容立刻打印;而像我們上面的代碼,主線程內(nèi)容會(huì)一直等待回調(diào)函數(shù)調(diào)用結(jié)束才會(huì)進(jìn)行打印。

沒(méi)有使用同步操作的情況下,打印結(jié)果:發(fā)起調(diào)用 調(diào)用返回 主線程內(nèi)容 得到結(jié)果 1 調(diào)用結(jié)束

而使用了同步操作后:

發(fā)起調(diào)用 調(diào)用返回 得到結(jié)果 9 調(diào)用結(jié)束 主線程內(nèi)容2. 使用條件鎖

和方法一的原理類似:

public class Demo2 extends BaseDemo { private final Lock lock = new ReentrantLock(); private final Condition con = lock.newCondition(); @Override public void callback(long response) { System.out.println("得到結(jié)果"); System.out.println(response); System.out.println("調(diào)用結(jié)束"); lock.lock(); try { con.signal(); }finally { lock.unlock(); } } public static void main(String[] args) { Demo2 demo2 = new Demo2(); demo2.call(); demo2.lock.lock(); try { demo2.con.await(); } catch (InterruptedException e) { e.printStackTrace(); }finally { demo2.lock.unlock(); } System.out.println("主線程內(nèi)容"); } }

基本上和方法一沒(méi)什么區(qū)別,只是這里使用了條件鎖,兩者的鎖機(jī)制有所不同。

java隊(duì)列實(shí)現(xiàn)異步執(zhí)行

在整個(gè)思路上要調(diào)整一下

1、會(huì)有很多線程給一個(gè)隊(duì)列上添加任務(wù)

2、有一個(gè)或者多個(gè)線程逐個(gè)執(zhí)行隊(duì)列的任務(wù)

考慮一下幾點(diǎn):

1、沒(méi)有任務(wù)時(shí),隊(duì)列執(zhí)行線程處于等待狀態(tài)

2、添加任務(wù)時(shí),激活隊(duì)列執(zhí)行線程,全部run起來(lái),首先搶到任務(wù)的執(zhí)行,其他全部wait

給個(gè)小例子吧

package?org;

import?java.util.LinkedList;

import?java.util.List;

public?class?Queues?{

public?static?ListTask?queue?=?new?LinkedListTask();

/**

?*?假如?參數(shù)o?為任務(wù)

?*?@param?o

?*/

public?static?void?add?(Task?t){

synchronized?(Queues.queue)?{

Queues.queue.add(t);?//添加任務(wù)

Queues.queue.notifyAll();//激活該隊(duì)列對(duì)應(yīng)的執(zhí)行線程,全部Run起來(lái)

}

}

static?class?Task{

public?void?test(){

System.out.println("我被執(zhí)行了");

}

}

}

package?org;

import?java.util.List;

public?class?Exec?implements?Runnable{

@Override

public?void?run()?{

while(true){

synchronized?(Queues.queue)?{

while(Queues.queue.isEmpty()){?//

try?{

Queues.queue.wait();?//隊(duì)列為空時(shí),使線程處于等待狀態(tài)

}?catch?(InterruptedException?e)?{

e.printStackTrace();

}

System.out.println("wait...");

}

Queues.Task?t=?Queues.queue.remove(0);?//得到第一個(gè)

t.test();?//執(zhí)行該任務(wù)

System.out.println("end");

}

}

}

public?static?void?main(String[]?args)?{

Exec?e?=?new?Exec();

for?(int?i?=?0;?i??2;?i++)?{

new?Thread(e).start();?//開(kāi)始執(zhí)行時(shí),隊(duì)列為空,處于等待狀態(tài)

}

//上面開(kāi)啟兩個(gè)線程執(zhí)行隊(duì)列中的任務(wù),那就是先到先得了

//添加一個(gè)任務(wù)測(cè)試

Queues.Task?t?=new?Queues.Task();

Queues.add(t);?//執(zhí)行該方法,激活所有對(duì)應(yīng)隊(duì)列,那兩個(gè)線程就會(huì)開(kāi)始執(zhí)行啦

}

}

上面的就是很簡(jiǎn)單的例子了

網(wǎng)頁(yè)標(biāo)題:異步j(luò)ava代碼,java異步執(zhí)行代碼
本文地址:http://jinyejixie.com/article28/hsdsjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、域名注冊(cè)、服務(wù)器托管、軟件開(kāi)發(fā)搜索引擎優(yōu)化、營(yíng)銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
武清区| 乐安县| 中阳县| 嘉兴市| 武宣县| 普宁市| 罗城| 衡阳县| 西昌市| 都兰县| 长垣县| 大田县| 瑞金市| 泗阳县| 密云县| 腾冲县| 北海市| 濉溪县| 永昌县| 枣庄市| 普安县| 如东县| 江孜县| 驻马店市| 巨鹿县| 元阳县| 南宫市| 瓮安县| 平泉县| 休宁县| 高安市| 日喀则市| 乌兰县| 河西区| 成安县| 多伦县| 随州市| 福安市| 南乐县| 吴江市| 阿巴嘎旗|