首先大家对java中的synchronized关键字肯定很熟悉了,也是java多线程中实现线程同步用的最多的关键字之一,但是最近笔者在使用关键字synchronized对Integer进行加锁时,却发现了一个很奇怪的现象,借此机会对相关知识进行了查阅总结,得出了下面的新的体会,如果有什么不合理的地方,欢迎留言。
参考博客:
https://blog.csdn.net/FYJ_jie/article/details/80404950
https://www.cnblogs.com/TianYuanSX/p/12779342.html
事情起因
经典卖票案例,使用synchronized配合Integer保证线程安全,发现并不能达到效果,上代码。
/**
* 1、创建类继承Thread 2、定义一个票数 这个票数会被所有窗口共享 3、在重写的run方法中实现卖票的代码
*/
public class Ticket extends Thread {
// 定义一个私有化的成员静态变量
private static Integer num = 50;
public Ticket() {
super();
// TODO Auto-generated constructor stub
}
public Ticket(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void run() {
// 卖票的循环操作
while (num > 0)