多线程目录
注意:多线程创建的两种方法:Thread类、Runnable接口
一、进程的概念
二、线程的概念
三、主线程的概念
四、多线程的原理
五、多线程原理的内存图解
六、Thread类与Runnable接口的区别(就是Runnable的好处,推荐)
七、并发与并行
八、线程优先级(java当中的CPU执行是抢占式调度的)
九、线程安全
(1)概述:
(2)解决方法:线程同步(分为3种)
同步代码块:(获得锁对象,才会执行;否则无法执行)
同步方法:(静态同步方法与非静态同步方法)
注意: 静态同步方法的锁对象是本类;非静态同步方法的锁对象是调用该方法的类,即this关键字所指的类
lock锁:
java.util.concurrent.locks.Lock 机制提供了比synchronized代码块和synchronized方法更广泛的锁定操作
同步代码块/同步方法具有的功能Lock都有,除此之外更强大,更体现面向对象
Lock锁也称同步锁,加锁与释放锁方法化了,如下:
public void lock() :加同步锁。
public void unlock() :释放同步锁
public class Ticket implements Runnable{
private int ticket = 100;
Lock lock = new ReentrantLock();
/*
* 执行卖票操作
*/
@Override
public void run() {
//每个窗口卖票的操作
//窗口 永远开启
while(true){
lock.lock();
try {
if(ticket>0){//有票 可以卖
//出票操作
//使用sleep模拟一下出票时间
Thread.sleep(50);
//获取当前线程对象的名字
String name = Thread.currentThread().getName();
System.out.println(name+"正在卖:"+ticket‐‐);
}
} catch(Exception e) {
// TODO Auto‐generated catch block
e.printStackTrace();
} finally {
lock.unlock(); //表示无论程序是否发生异常都会执行释放锁操作,这样会更加安全
}
}
}
}