Java线程安全之synchronized 与 lock的异同

* synchronized 与 lock的异同?
* 相同:二者都可以解决线程安全问题
* 不同:synchronized机制再执行完相应的同步代码以后,自动的释放同步监视器
* Lock需要手动的启动同步(lock()),同时结束同步也需要手动的实现(unlock())
复制代码
package java4;

import java.awt.*;
import java.util.concurrent.locks.ReentrantLock;

/**
 * @author 高槐玉
 * #Description 解决线程安全问题的方式三: Lock锁 ---JDK5.0新增(新特性建议用)
 *
 * synchronized 与 lock的异同?
 * 相同:二者都可以解决线程安全问题
 * 不同:synchronized机制再执行完相应的同步代码以后,自动的释放同步监视器
 *      Lock需要手动的启动同步(lock()),同时结束同步也需要手动的实现(unlock())
 *
 * #Date: 2022/10/7 17点47分
 * #Shangguigu:437集
 */

public class LockTest implements Runnable{
        private int ticket = 60;
        //实例化Reentrantlock
        private ReentrantLock lock = new ReentrantLock(true);
    @Override
    public void run() {
        while (true){
            try {
                //调用lock()
                lock.lock();
                if (ticket > 0) {
                    try {
                        Thread.sleep(300);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName() + "售票,票号为:" + ticket);
                    ticket--;
                } else {
                    break;
                }
            }finally {
                lock.unlock();
            }
        }
    }
}
class WindowTest{
    public static void main(String[] args){
        LockTest w = new LockTest();
        Thread t1 = new Thread(w);
        Thread t2 = new Thread(w);
        Thread t3 = new Thread(w);

        t1.setName("窗口一");
        t2.setName("窗口二");
        t3.setName("窗口三");

        t1.start();
        t2.start();
        t3.start();


    }
}
复制代码

 

posted @   高槐玉在隐身  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示