public static void main(String[] args) {
在墨脫等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),網(wǎng)絡(luò)營(yíng)銷推廣,外貿(mào)網(wǎng)站制作,墨脫網(wǎng)站建設(shè)費(fèi)用合理。
for(Thread t:getThreads()){
t.start();
}
}
public static Thread[] getThreads(){
Thread[] thread = new Thread[10];
for(int i=0;i10;i++){
final Integer num = new Integer(i);
thread[i] = new Thread(new Runnable(){
public void run() {
int j=5;
while(j--0){
System.out.println("this is thread"+num);
}
}
});
}
return thread;
}
把對(duì)這個(gè)list的check行為放到一個(gè)多線程里面去做.這樣當(dāng)執(zhí)行這個(gè)方法的時(shí)候.程序就會(huì)立刻返回,也就可以去處理其他事情了.線程會(huì)在后臺(tái)執(zhí)行.
不要把每個(gè)check都用一個(gè)線程,這樣的并發(fā)問(wèn)題,是非常復(fù)雜.
public void method(){
Thread t = new Thread() {
@Override
public void run() {
//dosomething
//線程在后臺(tái)執(zhí)行你想執(zhí)行的東西
}
};
t.start();
//該方法執(zhí)行后,立刻返回,讓程序得意執(zhí)行其他操作
}
這邊我寫了一個(gè)例子,兩個(gè)線程同時(shí)獲取隨機(jī)數(shù),當(dāng)獲取的值為68的時(shí)候則停止所有進(jìn)程。
這是目錄結(jié)構(gòu):MyThreadOne和MyThreadTwo是兩個(gè)線程,TestMain是主函數(shù),MyThread繼承Thread類。
MyThread.java
package?com.xsx.test;
public?class?MyThread?extends?Thread?{
public?void?stopThread()?{}
}
MyThreadOne.java
package?com.xsx.test;
import?java.util.Random;
public?class?MyThreadOne?extends?MyThread{
private?boolean?isOK?=?true;
Random?random?=?new?Random();//演示
public?void?stopThread()?{
this.isOK?=?false;
}
@Override
public?void?run()?{
while(isOK)?{
int?x?=?random.nextInt(10000);
System.out.println("Thread?One:?"?+?x);
if(x?==?68)?{
TestMain.stopAll();
System.out.println("My?Value?is?"?+?x);
break;
}
}
//這邊你結(jié)合自己的邏輯來(lái)寫,總之,是通過(guò)isOK來(lái)控制線程的
}
}
MyThreadTwo.java
package?com.xsx.test;
import?java.util.Random;
public?class?MyThreadTwo?extends?MyThread?{
private?boolean?isOK?=?true;
Random?random?=?new?Random();//演示
public?void?stopThread()?{
this.isOK?=?false;
}
@Override
public?void?run()?{
while(isOK)?{
int?x?=?random.nextInt(10000);
System.out.println("Thread?Two:?"?+?x);
if(x?==?68)?{
TestMain.stopAll();
System.out.println("My?Value?is?"?+?x);
break;
}
}
}
}
TestMain.java
package?com.xsx.test;
import?java.util.HashMap;
import?java.util.Iterator;
import?java.util.Map;
public?class?TestMain?{
public?static?MapString,?MyThread?threadPool?=?new?HashMapString,?MyThread();//定義一個(gè)線程池
/***
?*?終止所有線程
?*/
public?static?void?stopAll()?{
IteratorMyThread?threads?=?threadPool.values().iterator();
while(threads.hasNext())?{
threads.next().stopThread();
}
threadPool.clear();
}
public?static?void?main(String[]?args)?{
//實(shí)例化兩個(gè)線程獲取到隨機(jī)數(shù)為68時(shí)就停止進(jìn)程,并輸出
MyThread?thread1?=?new?MyThreadOne();//實(shí)例化線程1
MyThread?thread2?=?new?MyThreadTwo();//實(shí)例化線程2
threadPool.put("thread1",?thread1);//將線程1放入線程池中
threadPool.put("thread2",?thread2);//將線程2放入線程池中
thread1.start();//運(yùn)行
thread2.start();
}
}
項(xiàng)目已經(jīng)打包上傳
Java 給多線程編程提供了內(nèi)置的支持。 一條線程指的是進(jìn)程中一個(gè)單一順序的控制流,一個(gè)進(jìn)程中可以并發(fā)多個(gè)線程,每條線程并行執(zhí)行不同的任務(wù)。
新建狀態(tài):
使用 new 關(guān)鍵字和 Thread 類或其子類建立一個(gè)線程對(duì)象后,該線程對(duì)象就處于新建狀態(tài)。它保持這個(gè)狀態(tài)直到程序 start() 這個(gè)線程。
就緒狀態(tài):
當(dāng)線程對(duì)象調(diào)用了start()方法之后,該線程就進(jìn)入就緒狀態(tài)。就緒狀態(tài)的線程處于就緒隊(duì)列中,要等待JVM里線程調(diào)度器的調(diào)度。
運(yùn)行狀態(tài):
如果就緒狀態(tài)的線程獲取 CPU 資源,就可以執(zhí)行 run(),此時(shí)線程便處于運(yùn)行狀態(tài)。處于運(yùn)行狀態(tài)的線程最為復(fù)雜,它可以變?yōu)樽枞麪顟B(tài)、就緒狀態(tài)和死亡狀態(tài)。
阻塞狀態(tài):
如果一個(gè)線程執(zhí)行了sleep(睡眠)、suspend(掛起)等方法,失去所占用資源之后,該線程就從運(yùn)行狀態(tài)進(jìn)入阻塞狀態(tài)。在睡眠時(shí)間已到或獲得設(shè)備資源后可以重新進(jìn)入就緒狀態(tài)??梢苑譃槿N:
等待阻塞:運(yùn)行狀態(tài)中的線程執(zhí)行 wait() 方法,使線程進(jìn)入到等待阻塞狀態(tài)。
同步阻塞:線程在獲取 synchronized 同步鎖失敗(因?yàn)橥芥i被其他線程占用)。
其他阻塞:通過(guò)調(diào)用線程的 sleep() 或 join() 發(fā)出了 I/O 請(qǐng)求時(shí),線程就會(huì)進(jìn)入到阻塞狀態(tài)。當(dāng)sleep() 狀態(tài)超時(shí),join() 等待線程終止或超時(shí),或者 I/O 處理完畢,線程重新轉(zhuǎn)入就緒狀態(tài)。
死亡狀態(tài):
一個(gè)運(yùn)行狀態(tài)的線程完成任務(wù)或者其他終止條件發(fā)生時(shí),該線程就切換到終止?fàn)顟B(tài)。