java并發(fā)操作代碼實現(xiàn) java代碼實現(xiàn)并發(fā)調(diào)用接口

java 并發(fā)執(zhí)行任務(wù) 怎么做

/**

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:申請域名網(wǎng)站空間、營銷軟件、網(wǎng)站建設(shè)、振安網(wǎng)站維護(hù)、網(wǎng)站推廣。

* 定時器

* */

public class TimeThread extends Thread {

public void run() {

Timer time = new Timer();

TimerTask tst = new TimerTask();//定時執(zhí)行Rptlog類中的run方法

time.schedule(tst, 1000,10000);//1秒后執(zhí)行,每10秒執(zhí)行一次

}

}

接下來是實際執(zhí)行的類

public class TimerSendTask extends java.util.TimerTask{

public void run() {

TimerTask tt = new TimerTask();

for(int i=0;iservice.getList().size();i++){//循環(huán)查詢?nèi)蝿?wù)

定時清理任務(wù) 實現(xiàn)代碼段...

....

}

}

}

再寫多個任務(wù)的類

在這個地方執(zhí)行以下就好了

TimerTask tst = new TimerTask();//定時執(zhí)行Rptlog類中的run方法

time.schedule(tst, 1000,10000);//1秒后執(zhí)行,每10秒執(zhí)行一次

java代碼的高并發(fā)怎么用

public?class?Test?{

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

int?count?=?1000;

ExecutorService?executorService?=?Executors.newFixedThreadPool(count);

for?(int?i?=?0;?i??count;?i++)

executorService.execute(new?Test().new?Task());

executorService.shutdown();

while?(!executorService.isTerminated())?{

try?{

Thread.sleep(10);

}?catch?(InterruptedException?e)?{

e.printStackTrace();

}

}

}

public?class?Task?implements?Runnable?{

@Override

public?void?run()?{

try?{

//?測試內(nèi)容

}?catch?(Exception?e)?{

e.printStackTrace();

}

}

}

}??

如果要實現(xiàn)真正的并發(fā)同時執(zhí)行,可通過CyclicBarrier來控制。

public?class?Test?{

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

int?count?=?1000;

CyclicBarrier?cyclicBarrier?=?new?CyclicBarrier(count);

ExecutorService?executorService?=?Executors.newFixedThreadPool(count);

for?(int?i?=?0;?i??count;?i++)

executorService.execute(new?Test().new?Task(cyclicBarrier));

executorService.shutdown();

while?(!executorService.isTerminated())?{

try?{

Thread.sleep(10);

}?catch?(InterruptedException?e)?{

e.printStackTrace();

}

}

}

public?class?Task?implements?Runnable?{

private?CyclicBarrier?cyclicBarrier;

public?Task(CyclicBarrier?cyclicBarrier)?{

this.cyclicBarrier?=?cyclicBarrier;

}

@Override

public?void?run()?{

try?{

//?等待所有任務(wù)準(zhǔn)備就緒

cyclicBarrier.await();

//?測試內(nèi)容

}?catch?(Exception?e)?{

e.printStackTrace();

}

}

}

}

Java并發(fā)編程:如何創(chuàng)建線程,進(jìn)程

在java中如果要創(chuàng)建線程的話,一般有兩種方式:1)繼承Thread類;2)實現(xiàn)Runnable接口。

1.繼承Thread類

繼承Thread類的話,必須重寫run方法,在run方法中定義需要執(zhí)行的任務(wù)。

123456789101112

class MyThread extends Thread{ private static int num = 0; public MyThread(){ num++; } @Override public void run() { System.out.println("主動創(chuàng)建的第"+num+"個線程"); }}

創(chuàng)建好了自己的線程類之后,就可以創(chuàng)建線程對象了,然后通過start()方法去啟動線程。注意,不是調(diào)用run()方法啟動線程,run方法中只是定義需要執(zhí)行的任務(wù),如果調(diào)用run方法,即相當(dāng)于在主線程中執(zhí)行run方法,跟普通的方法調(diào)用沒有任何區(qū)別,此時并不會創(chuàng)建一個新的線程來執(zhí)行定義的任務(wù)。

1234567891011121314151617181920

public class Test { public static void main(String[] args) { MyThread thread = new MyThread(); thread.start(); }} class MyThread extends Thread{ private static int num = 0; public MyThread(){ num++; } @Override public void run() { System.out.println("主動創(chuàng)建的第"+num+"個線程"); }}

在上面代碼中,通過調(diào)用start()方法,就會創(chuàng)建一個新的線程了。為了分清start()方法調(diào)用和run()方法調(diào)用的區(qū)別,請看下面一個例子:

1234567891011121314151617181920212223

public class Test { public static void main(String[] args) { System.out.println("主線程ID:"+Thread.currentThread().getId()); MyThread thread1 = new MyThread("thread1"); thread1.start(); MyThread thread2 = new MyThread("thread2"); thread2.run(); }} class MyThread extends Thread{ private String name; public MyThread(String name){ this.name = name; } @Override public void run() { System.out.println("name:"+name+" 子線程ID:"+Thread.currentThread().getId()); }

java 怎樣處理高并發(fā)

一、背景綜述

并發(fā)就是可以使用多個線程或進(jìn)程,同時處理(就是并發(fā))不同的操作。

高并發(fā)的時候就是有很多用戶在訪問,導(dǎo)致系統(tǒng)數(shù)據(jù)不正確、糗事數(shù)據(jù)的現(xiàn)象。對于一些大型網(wǎng)站,比如門戶網(wǎng)站,在面對大量用戶訪問、高并發(fā)請求方面,基本的解決方案集中在這樣幾個環(huán)節(jié):使用高性能的服務(wù)器、高性能的數(shù)據(jù)庫、高效率的編程語言、還有高性能的Web容器。這幾個解決思路在一定程度上意味著更大的投入。

使用一般的synchronized或者是lock或者是隊列都是無法滿足高并發(fā)的問題。

二、解決方法有三:

1.使用緩存

2.使用生成靜態(tài)頁面

html純靜態(tài)頁面是效率最高、消耗最小的頁面。我們可以使用信息發(fā)布系統(tǒng)來實現(xiàn)簡單的信息錄入自動生成靜態(tài)頁面,頻道管理、權(quán)限管理和自動抓取等功能,對于一個大型網(wǎng)站來說,擁有一套高效、可管理的信息發(fā)布系統(tǒng)CMS是必不可少的。

3.圖片服務(wù)器分離

圖片是最消耗資源的,僵圖片和頁面分離可以降低提供頁面訪問請求的服務(wù)器系統(tǒng)壓力,并且可以保證系統(tǒng)不會因為圖片問題而崩潰。

3.寫代碼的時候減少不必要的資源浪費:

不要頻繁得使用new對象,對于在整個應(yīng)用中只需要存在一個實例的類使用單例模式.對于String的連接操作,使用StringBuffer或者StringBuilder.對于utility類型的類通過靜態(tài)方法來訪問。

避免使用錯誤的方式,如Exception可以控制方法推出,但是Exception要保留stacktrace消耗性能,除非必要不要使用 instanceof做條件判斷,盡量使用比的條件判斷方式.使用JAVA中效率高的類,比如ArrayList比Vector性能好。)

使用線程安全的集合對象vector ?hashtable

使用線程池

電腦培訓(xùn)分享Java 并發(fā)編程:核心理論

并發(fā)編程是Java程序員最重要的技能之一,也是最難掌握的一種技能。它要求編程者對計算機(jī)最底層的運作原理有深刻的理解,同時要求編程者邏輯清晰、思維縝密,這樣才能寫出高效、安全、可靠的多線程并發(fā)程序。電腦培訓(xùn)發(fā)現(xiàn)本系列會從線程間協(xié)調(diào)的方式(wait、notify、notifyAll)、Synchronized及Volatile的本質(zhì)入手,詳細(xì)解釋JDK為我們提供的每種并發(fā)工具和底層實現(xiàn)機(jī)制。在此基礎(chǔ)上,我們會進(jìn)一步分析java.util.concurrent包的工具類,包括其使用方式、實現(xiàn)源碼及其背后的原理。本文是該系列的第一篇文章,是這系列中最核心的理論部分,之后的文章都會以此為基礎(chǔ)來分析和解釋。

關(guān)于java并發(fā)編程及實現(xiàn)原理,還可以查閱《Java并發(fā)編程:Synchronized及其實現(xiàn)原理》。

一、共享性

數(shù)據(jù)共享性是線程安全的主要原因之一。如果所有的數(shù)據(jù)只是在線程內(nèi)有效,那就不存在線程安全性問題,這也是我們在編程的時候經(jīng)常不需要考慮線程安全的主要原因之一。但是,在多線程編程中,數(shù)據(jù)共享是不可避免的。最典型的場景是數(shù)據(jù)庫中的數(shù)據(jù),為了保證數(shù)據(jù)的一致性,我們通常需要共享同一個數(shù)據(jù)庫中數(shù)據(jù),即使是在主從的情況下,訪問的也同一份數(shù)據(jù),主從只是為了訪問的效率和數(shù)據(jù)安全,而對同一份數(shù)據(jù)做的副本。我們現(xiàn)在,通過一個簡單的示例來演示多線程下共享數(shù)據(jù)導(dǎo)致的問題。

二、互斥性

資源互斥是指同時只允許一個訪問者對其進(jìn)行訪問,具有唯一性和排它性。我們通常允許多個線程同時對數(shù)據(jù)進(jìn)行讀操作,但同一時間內(nèi)只允許一個線程對數(shù)據(jù)進(jìn)行寫操作。所以我們通常將鎖分為共享鎖和排它鎖,也叫做讀鎖和寫鎖。如果資源不具有互斥性,即使是共享資源,我們也不需要擔(dān)心線程安全。例如,對于不可變的數(shù)據(jù)共享,所有線程都只能對其進(jìn)行讀操作,所以不用考慮線程安全問題。但是對共享數(shù)據(jù)的寫操作,一般就需要保證互斥性,上述例子中就是因為沒有保證互斥性才導(dǎo)致數(shù)據(jù)的修改產(chǎn)生問題。

java 多進(jìn)程并發(fā)控制怎么做?

進(jìn)程間的通訊無非就是讀寫文件,socket通訊或者使用共享內(nèi)存。 你不想用讀寫文件的方式,那就用共享內(nèi)存或者socket通訊的方式。我個人覺得用socket比較簡單,也許是因為我對socket比較熟悉。 下面是一篇java實現(xiàn)共享內(nèi)存的文章,java沒法管理內(nèi)存,其實他也是靠創(chuàng)建映像文件來實現(xiàn)的。 共享內(nèi)存在java中的實現(xiàn) 在jdk1.4中提供的類MappedByteBuffer為我們實現(xiàn)共享內(nèi)存提供了較好的方法。該緩沖區(qū)實際上是一個磁盤文件的內(nèi)存映像。二者的變化將保持同步,即內(nèi)存數(shù)據(jù)發(fā)生變化會立刻反映到磁盤文件中,這樣會有效的保證共享內(nèi)存的實現(xiàn)。 將共享內(nèi)存和磁盤文件建立聯(lián)系的是文件通道類:FileChannel。該類的加入是JDK為了統(tǒng)一對外部設(shè)備(文件、網(wǎng)絡(luò)接口等)的訪問方法,并且加強(qiáng)了多線程對同一文件進(jìn)行存取的安全性。例如讀寫操作統(tǒng)一成read和write。這里只是用它來建立共享內(nèi)存用,它建立了共享內(nèi)存和磁盤文件之間的一個通道。 打開一個文件建立一個文件通道可以用RandomAccessFile類中的方法getChannel。該方法將直接返回一個文件通道。該文件通道由于對應(yīng)的文件設(shè)為隨機(jī)存取文件,一方面可以進(jìn)行讀寫兩種操作,另一方面使用它不會破壞映像文件的內(nèi)容(如果用FileOutputStream直接打開一個映像文件會將該文件的大小置為0,當(dāng)然數(shù)據(jù)會全部丟失)。這里,如果用 FileOutputStream和FileInputStream則不能理想的實現(xiàn)共享內(nèi)存的要求,因為這兩個類同時實現(xiàn)自由的讀寫操作要困難得多。 下面的代碼實現(xiàn)了如上功能,它的作用類似UNIX系統(tǒng)中的mmap函數(shù)。 // 獲得一個只讀的隨機(jī)存取文件對象 RandomAccessFile RAFile = new RandomAccessFile(filename,"r"); // 獲得相應(yīng)的文件通道 FileChannel fc = RAFile.getChannel(); // 取得文件的實際大小,以便映像到共享內(nèi)存 int size = (int)fc.size(); // 獲得共享內(nèi)存緩沖區(qū),該共享內(nèi)存只讀 MappedByteBuffer mapBuf = fc.map(FileChannel.MAP_RO,0,size); // 獲得一個可讀寫的隨機(jī)存取文件對象 RAFile = new RandomAccessFile(filename,"rw"); // 獲得相應(yīng)的文件通道 fc = RAFile.getChannel(); // 取得文件的實際大小,以便映像到共享內(nèi)存 size = (int)fc.size(); // 獲得共享內(nèi)存緩沖區(qū),該共享內(nèi)存可讀寫 mapBuf = fc.map(FileChannel.MAP_RW,0,size); // 獲取頭部消息:存取權(quán)限 mode = mapBuf.getInt(); 如果多個應(yīng)用映像同一文件名的共享內(nèi)存,則意味著這多個應(yīng)用共享了同一內(nèi)存數(shù)據(jù)。這些應(yīng)用對于文件可以具有同等存取權(quán)限,一個應(yīng)用對數(shù)據(jù)的刷新會更新到多個應(yīng)用中。 為了防止多個應(yīng)用同時對共享內(nèi)存進(jìn)行寫操作,可以在該共享內(nèi)存的頭部信息加入寫操作標(biāo)志。該共享內(nèi)存的頭部基本信息至少有: int Length; // 共享內(nèi)存的長度。 int mode; // 該共享內(nèi)存目前的存取模式。 共享內(nèi)存的頭部信息是類的私有信息,在多個應(yīng)用可以對同一共享內(nèi)存執(zhí)行寫操作時,開始執(zhí)行寫操作和結(jié)束寫操作時,需調(diào)用如下方法: public boolean StartWrite() { if(mode == 0) { // 標(biāo)志為0,則表示可寫 mode = 1; // 置標(biāo)志為1,意味著別的應(yīng)用不可寫該共享內(nèi)存 mapBuf.flip(); mapBuf.putInt(mode); // 寫如共享內(nèi)存的頭部信息 return true; } else { return false; // 指明已經(jīng)有應(yīng)用在寫該共享內(nèi)存,本應(yīng)用不可寫該共享內(nèi)存 } } public boolean StopWrite() { mode = 0; // 釋放寫權(quán)限 mapBuf.flip(); mapBuf.putInt(mode);

當(dāng)前題目:java并發(fā)操作代碼實現(xiàn) java代碼實現(xiàn)并發(fā)調(diào)用接口
鏈接地址:http://muchs.cn/article2/docdooc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、全網(wǎng)營銷推廣、營銷型網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、網(wǎng)站維護(hù)、定制開發(fā)

廣告

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

成都做網(wǎng)站