首页 > 编程语言 >Java线程安全之synchronized 与 lock的异同

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

时间:2022-10-07 18:23:29浏览次数:56  
标签:同步 Java synchronized Thread lock 线程 new

* 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();


    }
}

 

标签:同步,Java,synchronized,Thread,lock,线程,new
From: https://www.cnblogs.com/gaohuaiyu/p/16760218.html

相关文章

  • Caused by: java.lang.IllegalStateException: Detec
    SLF4J:Detectedbothlog4j-over-slf4j.jarANDslf4j-log4j12.jarontheclasspath,preemptingStackOverflowError.SLF4J:Seealso​​​http://www.slf4j.org/cod......
  • 捕获Java线程池执行任务抛出的异常
    捕获Java线程池执行任务抛出的异常Java中线程执行的任务接口java.lang.Runnable要求不抛出Checked异常,publicinterfaceRunnable{publicabstractvoidrun();......
  • java tempalte
    //javaservicepackagetx.txservice.service;importcom.baomidou.mybatisplus.core.conditions.query.QueryWrapper;importjava.util.List;publicinterfaceTem......
  • hive元起动报错:Exception in thread "main" java.lang.NoSuchMethodError: com.google
    错误原因:1.系统找不到这个类所在的jar包2.jar包的版本不一样系统不知道使用哪个。 hive启动报错的原因是后者解决办法:1、com.google.common.base.Preconditions.che......
  • Java实现rtrim功能,批量删除字符串指定末尾的字符串
    publicstaticStringremoveEndLoop(Stringstr,Stringremove){if(StringUtils.isBlank(str)||StringUtils.isBlank(remove)){returnstr;}......
  • java--equals和==用法
    //引用类型不能用相等于==去比较,引用类型都是在堆内存,比较的是地址值,所以用equals数组是引用类型,不能使用==去比较//基本数据类型用==去比较1、equals是object的方法......
  • JavaScript 学习-49.localStorage前端保存数据
    前言localstorage在浏览器的API有两个:localStorage和sessionStorage存在于window对象中:localStorage对应window.localStorage,sessionStorage对应window.sessio......
  • 从0到1掌握Java全栈小程序开发,玩转微信生态
    从0到1掌握Java全栈小程序开发,玩转微信生态Java :Java基础JDBC基础Java集合Java多线程系列JUC系列JavaIO基础JavaCore:Java虚拟机系列JVM虚拟机监控及性能......
  • Java修饰词
    一到学校感觉写点博客随笔的时间和机会就少了,最近开了Java课程,趁着线上金工实习啥也不想听还不如写点笔记,毕竟逸一时,误一世捏。首先学过的都知道,Java是一种面向对象编程(O......
  • java 范型
    一、范型代码的格式可以是范型类也可以范型方法1、范型类classClassName<T,....>{......ClassName的属性和方法}如上跟普通的类相比,增加了<T,....>如下是一个简......