首页 > 其他 > 详细

证明同步函数使用的this锁

时间:2019-12-19 18:53:38      阅读:92      评论:0      收藏:0      [点我收藏+]

当多个线程操作统一成员变量或者静态变量,在做写的操作时就会发送线程安全问题,做读的操作不会发生线程安全问题。防止线程安全问题可以使用同步代码块(使用的时明锁),同步函数(使用的是this锁),静态同步函数(使用的字节码文件及类.class)

证明同步函数使用的this锁 一个线程使用同步代码,一个线程使用同步函数,如果使用的不是同一把锁则会发生线程安全问题

package www.it.com.thread;

/**
 * @author wangjie
 * @date 2019/11/21 11:42
 * @description 证明同步函数使用的是this锁 一个线程使用代码块,一个使用同步函数
 * @company 石文软件有限公司
 */
public class SynchronizedDemo implements Runnable {
    private Integer count = 100;
    private boolean flag = true;
    //自定义锁
    private Object object = new Object();
    @Override
    public void run() {
        if (flag) {
            while (true) {
                synchronized (object) {
                    if (count > 0) {
                        try {
                            Thread.sleep(40);
                        } catch (Exception e) {

                        }
                        System.out.println(Thread.currentThread().getName() + ",出售 第" + (100 - count + 1) + "张票.");
                        count--;
                    }
                }
            }
        } else {
            while (true) {
                sale();
            }
        }

    }


    public synchronized void sale() {
        if (count > 0) {
            try {
                Thread.sleep(40);
            } catch (Exception e) {

            }
            System.out.println(Thread.currentThread().getName() + ",出售 第" + (100 - count + 1) + "张票.");
            count--;
        }

    }


    public static void main(String[] args) throws InterruptedException {
        SynchronizedDemo synchronizedDemo = new SynchronizedDemo();
        Thread thread1 = new Thread(synchronizedDemo, "线程一");
        Thread thread2 = new Thread(synchronizedDemo, "线程二");
        thread1.start();
        Thread.sleep(100);
        synchronizedDemo.flag = false;
        thread2.start();
    }

}

当同步代码块使用object锁时运行发生线性安全问题

技术分享图片

将同步代码块变成this锁,因为和同步函数使用的是同一把锁this,所以不会发生线程安全问题

证明同步函数使用的this锁

原文:https://www.cnblogs.com/wang66a/p/12069284.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!