多线程
- 多线程的创建
new Thread可以创建一个线程
提供了Runnable接口,则该线程具有执行逻辑
调用start开启线程
通过实现Runnable接口或者继承Thread类来创建线程
public class Thread_1 {
public static void main(String[] args) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"1111111");
print();
}
public void print() {
System.out.println("哈哈哈");
}
});
thread.start();
new MyThread1().start();
System.out.println(Thread.currentThread().getName()+"over");
}
}
class MyThread1 extends Thread{
@Override
public void run() {
super.run();
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+" "+i);
}
}
}
线程池
响原模式
通过Executors来创建线程池
通过ExecutorService来接收
单一线程池 执行线程为1 线程任务不固定 先放入先执行
固态线程池 执行线程自己设定 线程任务不固定 先放入先执行
缓存线程池 执行线程自动分配 线程任务不固定 先放入先执行
public static void main(String[] args) {
ExecutorService pool = Executors.newCachedThreadPool();
pool.execute(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+" "+i);
}
}
});
pool.execute(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+" "+i);
}
}
});
pool.shutdown();
System.out.println("over");
}
线程通信
- submit
后台线程
- 后台线程在所有的前台线程结束之后,后台线程自动消亡
在线程启动之前设置
setDaemon(true) 设置为后台线程
线程休眠
- TimeUnit来控制sleep