美文网首页
锁对象改变引发的线程问题

锁对象改变引发的线程问题

作者: keepSwiming | 来源:发表于2017-06-23 16:24 被阅读14次

Java多线程锁对象的改变

用lock获取锁对象,当lock被修改以后,会产生是一把新的锁,另一个线程获取锁对象时会获取这把新的锁,导致线程异步执行.

public class ChangeLock {

    private String lock = "lock";
    
    private void method(){
        System.out.println(Thread.currentThread().getName() + "开始"+"获取锁对象"+lock);
        synchronized (lock) {
            try {
                System.out.println("当前线程 : "  + Thread.currentThread().getName() + "获得了"+"锁对象"+lock);
                lock = "change lock";
                Thread.sleep(2000);
                System.out.println("当前线程 : "  + Thread.currentThread().getName() + "结束");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    
    public static void main(String[] args) {
    
        final ChangeLock changeLock = new ChangeLock();
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                changeLock.method();
            }
        },"t1");
        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                changeLock.method();
            }
        },"t2");
        t1.start();
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        t2.start();
    }
    
}

log信息

//正常试验结果
t1开始获取锁对象lock
当前线程 : t1获得了锁对象lock
t2开始获取锁对象change lock
当前线程 : t2获得了锁对象change lock
当前线程 : t1结束
当前线程 : t2结束

//sleep注销了的log信息
t1开始获取锁对象lock
t2开始获取锁对象lock
当前线程 : t1获得了锁对象lock
当前线程 : t1结束
当前线程 : t2获得了锁对象change lock
当前线程 : t2结束

相关文章

  • 锁对象改变引发的线程问题

    Java多线程锁对象的改变 用lock获取锁对象,当lock被修改以后,会产生是一把新的锁,另一个线程获取锁对象时...

  • 互斥锁和自旋锁

    当多个线程访问同一个变量时, 很容易引发数据安全问题. 可以添加 互斥锁或者自旋锁解决这个问题. 自旋锁当一个线程...

  • mysql锁的简单理解

    一.锁 我们通常概念里的锁,是用来处理线程安全问题,锁(latch)的对象是线程,而在mysql中通常所说的锁(l...

  • iOS 中锁的应用

    锁的应用是为了保证线程安全 多个线程访问同一块资源的时候,很容易引发数据混乱问题 基本概念 自旋锁用于线程同步,线...

  • 多线程 -线程安全

    线程安全隐患 资源共享 解决数据错乱问题使用互斥锁互斥锁使用格式: @synchronized(锁对象) { //...

  • 多线程同步

    多线程的同步依靠的是对象锁机制 加错锁(this)但是每个线程都持有this对象的对象锁 正确加锁外部创建共享资源...

  • synchronized和lock简单理解

    synchronized(同步锁) 思考:锁什么?锁对象 可能锁对象包括:this,临界资源对象(所有线程可能访问...

  • java内置锁synchronized的可重入性

    当线程请求一个由其它线程持有的对象锁时,该线程会阻塞,而当线程请求由自己持有的对象锁时,如果该锁是重入锁,请求就会...

  • 2019-08-08 面试基础之并发编程

    一.synchronized关键字 1.线程安全问题 2.synchronized获取的锁分类:对象锁和类锁 二....

  • 并发编程 ThreadLocal

    概述 1个对象被多个线程同时引用且操作(比如作为线程的成员变量),会引发线程安全的问题。但是可以通过给该对象设置T...

网友评论

      本文标题:锁对象改变引发的线程问题

      本文链接:https://www.haomeiwen.com/subject/hsvccxtx.html