• 证明同步函数使用的this锁


    当多个线程操作统一成员变量或者静态变量,在做写的操作时就会发送线程安全问题,做读的操作不会发生线程安全问题。防止线程安全问题可以使用同步代码块(使用的时明锁),同步函数(使用的是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,所以不会发生线程安全问题

    小蘑菇
  • 相关阅读:
    今天封装了一下 gridview 在没有数据的时候显示表头 并且提示数据为空的方法
    动态绑定treeview的方法
    Android为拨号盘dialer定制声音DTMF Tones
    如何降低android应用程序的耗电量
    DTMF双音多频按键信号的定义
    ant 实现批量打包android应用
    android网络编程——使用Android中的网络连接
    Android Service被关闭后自动重启,解决被异常kill 服务
    android中阿拉伯文研究
    android网络编程——http get
  • 原文地址:https://www.cnblogs.com/wang66a/p/12069284.html
Copyright © 2020-2023  润新知