不用Synchronized关键词会出现的问题

简介: 结果:多个线程共享ticket变量,会导致ticket的值变为-1甚至-2才停下来,而不是为0才停。原因:没上锁,可能三个线程同时走进if分支。

多线程会出现的问题


1)请你看看以下的代码有什么问题?

public class Sell extends Thread{
    private static int ticket=100;
    @Override
    public void run(){
        while(true){
            if(ticket<=0)
            System.out.println("停止卖");
            break;
        }
    Thread.sleep(1000);
    System.out.println("窗口"+Thread.currentThread().getName()+
                            "售出一个,剩余票数还有"+(--ticket));
    }
}


Sell sell1=new Sell();
Sell sell2=new Sell();
Sell sell3=new Sell();
sell1.start();//启动三个线程
sell2.start();
sell3.start();


结果:多个线程共享ticket变量,会导致ticket的值变为-1甚至-2才停下来,而不是为0才停。

原因:没上锁,可能三个线程同时走进if分支。



2)请你看看以下的代码有什么问题?

public class Sell02 implements Runnable{
    private int ticket=100;
    @Override
    public void run(){
        while(true){
            if(ticket<=0)
            System.out.println("停止卖");
            break;
        }
    Thread.sleep(1000);
    System.out.println("窗口"+Thread.currentThread().getName()+
                            "售出一个,剩余票数还有"+(--ticket));
    }
}


与1)的不同点:

1.继承类改为了实现接口

2.取消了static

此时把同个对象放到了不同线程。

Sell02 sell1=new Sell02();
new Thread(sell1).start();//启动三个线程
new Thread(sell1).start();
new Thread(sell1).start();


结果:还是会有负数现象。


原因:同1)。



那么此时怎么解决这个多线程的问题?


线程同步技术Synchronized加在代码块中即可。

目录
相关文章
|
10月前
|
存储 安全 Java
Synchronized 优化
Synchronized 优化
|
Java 编译器
volatile关键词在多线程中的应用
volatile关键词在多线程中的应用
61 0
volatile关键词在多线程中的应用
|
前端开发 Java Spring
方法上加上 synchronized 就可以了么
方法上加上 synchronized 就可以了么
|
安全 Java
【并发多线程】java并发中的Synchronized关键词
【并发多线程】java并发中的Synchronized关键词
99 0
C++ explicit 关键词作用
C++ explicit 关键词作用
140 0
|
Java
Java多线程之synchronized关键词(Demo详解)
你好我是辰兮,很高兴你能来阅读,本篇文章为大家讲解Java多线程之synchronized关键词,下面有案例的截图和相关代码可以自行实践,相关的更多面试知识已经提前整理好文章可以阅读学习,分享获取新知,希望对Java初学者有帮助。
160 0
Java多线程之synchronized关键词(Demo详解)
|
缓存 算法 安全
volatile和synchronized到底啥区别?多图文讲解告诉你
volatile和synchronized到底啥区别?多图文讲解告诉你
|
存储 监控 Java
Java并发 --- synchronized 关键字
Java并发 --- synchronized 关键字
Java并发 --- synchronized 关键字
|
Java
synchronized 中的 4 个优化,你知道几个?(3)
synchronized 中的 4 个优化,你知道几个?(3)
109 0
synchronized 中的 4 个优化,你知道几个?(3)
|
安全 Java
synchronized 中的 4 个优化,你知道几个?(1)
synchronized 中的 4 个优化,你知道几个?(1)
140 0
synchronized 中的 4 个优化,你知道几个?(1)