第8章 多线程
1、进程与线程
(1)进程指程序的一次执行过程,是系统运行程序的基本单位;
(2)线程是进程的进一步划分,是比进程更小的执行单位;
(3)多线程指多个线程并发执行。
2、线程的生命周期
五种状态:创建、就绪、运行、阻塞、终止
3、线程的创建方式
(1)继承Thread类,重写run()方法
(2)实现Runnable接口
e.g.
// 线程1:继承Thread类,重写run()方法
class Th1 extends Thread{
@Override
public void run() {
super.run();
for (char i='A';i<='Z';i++){
System.out.println(i);
if(i=='Z')
i='A';
}
}
}
// 线程2:通过类实现Runnable接口
class Th2 implements Runnable{
@Override
public void run() {
for (int i='A';i<='Z';i++){
System.out.println(i);
if(i=='Z')
i='A';
}
}
}
// 线程3:通过匿名类实现Runnable接口
class Th3{
Thread t3 = new Thread(){
@Override
public void run() {
super.run();
for (char i='a';i<='z';i++){
System.out.println(i);
if(i=='z')
i='a';
}
}
};
}
// 线程4:通过Lambda表达式实现Runnable接口
class Th4{
Thread t4 = new Thread(()->{
for (int i='a';i<='z';i++){
System.out.println(i);
if(i=='z')
i='a';
}
});
}
public class Demo1 {
public static void main(String[] args) {
Th1 t1 = new Th1(); // 创建线程1的实例
t1.setName("线程1"); // 设置线程1的名称
System.out.println(t1.getName());
t1.setPriority(10); // 设置线程的优先级【[1,10],默认5】
t1.start(); // 启动线程1
Th2 th2 = new Th2(); // 创建Th2类的实例
Thread t2 = new Thread(th2); // 创建线程2
t2.setName("线程2"); // 设置线程2的名称
t2.start(); // 启动线程2
Th3 th3 = new Th3(); // 创建Th3类的实例
th3.t3.setName("线程3"); // 设置线程3的名称
th3.t3.setPriority(1);
th3.t3.start(); // 启动线程3
Th4 th4 = new Th4(); // 创建Th4类的实例
th4.t4.setName("线程4"); // 设置线程4的名称
th4.t4.start(); // 启动线程4
}
}
4、线程的同步机制
当多个线程同时读写同一份共享资源的时候,可能引起冲突,此时需要引入线程同步机制;
Java中实现线程同步采用互斥锁标记;
线程同步的实现方式:
(1)使用synchronized(synObject)代码块
synchronized(synObject){
// 需要同步的代码
}
(2)使用同步方法
synchronized static void m(){
// 需要同步的代码
}