线程和进程:
线程:程序执行流的最小单元
进程:进程是线程的容器
Thread类:
Thread类是Java中用于处理线程事件的一个类。
启动线程的步骤:
- 创建Thread子类对象
- 子类对象调用方法start()
线程启动:
第一步:创建Thread子类(不用)
public class SubThread extends Thread{
//重写run()方法
public void run(){
System.out.println(getName());
}
}
第二步:调用对象方法start()
SubThread st = new SubThread();
//启动线程
st.start();
建议使用: 使用匿名内部类,实现多线程程序
new Thread(new Runnable() {
@Override
public void run() {
//执行语句;
}
}).start();
设置和获取线程名称:
设置线程名称(一般不用)
//设置线程名称
st.setName("旺财");
获取正在运行的线程名字:
String name = Thread.currentThread().getName()
线程的生命周期
线程的方法
线程休眠
Thread.sleep(200);//休眠200ms
线程池
- 创建线程池:
//调用工厂类的静态方法,创建线程池对象
//返回线程池对象,是返回的接口
ExecutorService es = Executors.newFixedThreadPool(2); //“2”为线程数量
- 创建线程子类,实现Runnable接口
public class ThreadPoolRunnable implements Runnable{
@Override //重写接口方法
public void run() {
System.out.println(Thread.currentThread().getName()+"线程提交任务");
}
}
- 调用线程接口实现启动线程
//调用接口实现类中的
es.submit(new ThreadPoolRunnable());
实现异步求和(线程池案例)
- 创建求和线程子类
import java.util.concurrent.Callable;
public class GetSumCallable implements Callable<Integer> {
private int a ;
public GetSumCallable(int a){
this.a = a;
}
public Integer call(){
int sum = 0;
for(int i = 1;i <= a; i++){
sum = sum+i;
}
return sum;
}
}
- 调用线程池的方法
public static void main(String[] args) throws InterruptedException, ExecutionException {
ExecutorService es = Executors.newFixedThreadPool(2);
Future<Integer> f1 = es.submit(new GetSumCallable(100));
Future<Integer> f2 = es.submit(new GetSumCallable(100000));
System.out.println(f1.get());
System.out.println(f2.get());
es.shutdown(); //摧毁线程池
}