线程
线程:线程是进程的一个单元,是CPU调度和执行的单位
进程:进程是程序执行的一次过程,是一个动态的概念。进程是系统资源分配的单位,一个进程可以拥有多个线程并且至少拥有一个线程。
线程的创建
线程的创建有三种方式:
- 继承Thread类,重写run()方法,调用start()方法
- 实现Runnable接口
- 实现Callable接口
1继承Thread接口
/**
* 多线程的创建
* 1.继承Thread类,重写run()方法,调用start()方法开启线程
*/
public class Demo01Thread extends Thread {
// 重写run()方法
@Override
public void run() {
for (int i = 0; i < 200; i++) {
System.out.println(i);
}
}
public void test01() {
// 创建一个线程对象
Demo01Thread dt = new Demo01Thread();
// 调用start()方法开启线程
dt.start();
}
}
2 实现Runable接口
/**
* 创建线程的第二种方式
* 实现Runnable接口,重写run()方法,在线程对象中放入runnable接口的实现类,调用start()方法
*/
public class Demo03Thread implements Runnable {
// 重写run()方法
@Override
public void run() {
for (int i = 0; i < 200; i++) {
System.out.println(i);
}
}
public void test01() {
// 创建一个runnable接口的实现类对象
Demo01Thread dt = new Demo01Thread();
// 创建线程对象,通过线程对象来开启线程,代理
Thread thread = new Thread(dt);
// 调用start()方法开启线程
thread.start();
for (int i = 0; i < 200; i++) {
System.out.println("liyeli" +i);
}
}
}
3、实现Callable接口
/**
* 实现Callable接口
* 重写call()方法,
* 创建一个线程执行服务Executors.newFixedThreadPool()
* 提交执行.submit(Callable接口的实现类对象)
* 获取结果 get()方法
* 关闭线程服务shutdownNow()
*/
public class Demo06Thread implements Callable<Boolean> {
// 重写call方法
@Override
public Boolean call() throws Exception {
// 线程的执行体
return null;
}
public void test01(){
// 创建Callable接口的实现类对象
Demo06Thread dt1 = new Demo06Thread();
Demo06Thread dt2 = new Demo06Thread();
Demo06Thread dt3 = new Demo06Thread();
// 创建一个线程执行服务
ExecutorService es = Executors.newFixedThreadPool(3); // 指定线程数目为3个
// 提交执行
Future<Boolean> s1 = es.submit(dt1);
Future<Boolean> s2 = es.submit(dt2);
Future<Boolean> s3 = es.submit(dt3);
// 获取结果
try {
Boolean b1 = s1.get();
Boolean b2 = s2.get();
Boolean b3 = s3.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
// 关闭线程执行服务
es.shutdownNow();
}
}