001--【并发】并发问题入门
2020-07-20 本文已影响0人
糖纸疯了
1、写在前面
在此记录,以备遗忘
2、核心操作
2.1、厕所问题
2.2、并发场景
2.3、厕所问题代码实现
3、具体操作
3.1、厕所问题
- 1)一个人使用厕所时,不用排队,只要能解决生理问题,其他都可以忽略
- 2)现在用户变多了,私有厕所变成了公共厕所,每个时间点都可能有多个人进行使用,怎么解决这个问题?
加一把锁不就好了,如果们被锁住了,就代表有人在使用这个厕所,问题完美被解决了!
3.2、并发场景
并发问题就是解决【多个线程】使用【同一个公共资源】的事情!
- 1)多线程同时改变一个数据
- 2)多个线程在高并发只获取指定的一个数据【单例模式】
- 3)银行转账【同一时间可能存款、可能取款】
- 4)....
3.3、厕所问题代码实现
直接在业务逻辑上添加synchronized关键字即可
public class Test02Main {
// 执行业务逻辑-添加synchronized关键字
public synchronized static void accesResource() {
try {
// 1、直接使用线程进行休眠
// Thread.sleep(2);
// 2、使用时间工具类进行休眠
TimeUnit.SECONDS.sleep(2);//2秒钟
System.out.println(Thread.currentThread().getName() + "----is running");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 创建多个线程执行主业务
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
new Thread(Test02Main::accesResource).start();
}
}
}