Java線程2

Java線程2
爲了提高系統處理的效率,除了其他方法外,增加了多線程的方式。對於增加的線程而言,線程本身也是需要管理了,這就出現了線程池,線程池就是用來管理線程的。對於java來說,提供了一些線程池的管理:
1、Executors.newCachedThreadPool()緩存線程池
2、Executors.newFixedThreadPool(param)固定大小的線程池
3、Executors.newScheduledThreadPool(param);定時的線程池
4、Executors.newSingleThreadExecutor();順序執行的線程池
5、Executors.newSingleThreadScheduledExecutor();順序執行的定時的線程池

Executors是一個工廠類,可以調用他來創建各種線程池,
ExecutorService是線程池的接口,通過這個可以調用
submit(Runnable runn);將線程加入到線程池中,按照一定的規則來執行添加的線程,返回值爲Future<?>
submit(Callable<T> call);返回值爲Future<T>
shutdown();調用這個方法後,就不能在向線程池中添加線程或者是任務,等待加入到線程池中的線程執行完。
isShutdown();沒有調用shutdown()時是false,調用後是true
isTerminated();調用shutdown()後,並且所有的線程執行完,則是true,否則是false
以緩存線程爲例:
package cn.com.theadpool;
import java.util.Random;
public class WorkTask implements Runnable {
private int index;
public WorkTask(int index){
this.index = index;br/>}
@Override
public void run() {
// TODO Auto-generated method stub
Random random = new Random();
int ra = random.nextInt(10000);
try {
Thread.sleep(ra);
System.out.println(index);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

package cn.com.theadpool;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TestMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
ExecutorService es = Executors.newCachedThreadPool();
for(int i=0;i<10;i++) {
es.submit(new WorkTask(i));
}
}
}

Timer和TimerTask的關係相當於Thread和Runnable的關係,但是有不同之處。
TimerTask的創建需要實現run()方法,這個方法中的業務就是要定時執行的任務。
而Timer中的方法schedule就是設置TimerTask並且設置執行的時間和每隔多久執行的設置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章