Java线程2
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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并且设置执行的时间和每隔多久执行的设置。
以上是关于Java线程2的主要内容,如果未能解决你的问题,请参考以下文章