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(); }
}
Java线程安全之synchronized 与 lock的异同的更多相关文章
- Java多线程之线程同步【synchronized、Lock、volatitle】
线程同步 线程同步:当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作,而其他线程又处于等待状态,实现线程同步的方法有很多. ...
- java中synchronized与Lock的异同
本文转载自java中synchronized与Lock的异同 前言 synchronized和Lock通过互斥保障原子性,能够保护共享数据以实现线程安全,其作用包括保障原子性.可见性.有序性 常见问题 ...
- JAVA 线程状态以及synchronized,wait,sleep,yield,notify,notifyAll
java线程存在以下几种状态: 1: 创建状态(New):线程被new出来,还未调用start 2: 就绪状态(Runnable):又称为可执行状态,调用线程的start方法后,线程处于就绪状态,,线 ...
- (删)Java线程同步实现二:Lock锁和Condition
在上篇文章(3.Java多线程总结系列:Java的线程同步实现)中,我们介绍了用synchronized关键字实现线程同步.但在Java中还有一种方式可以实现线程同步,那就是Lock锁. 一.同步锁 ...
- Java线程锁,synchronized、wait、notify详解
(原) JAVA多线程这一块有点绕,特别是对于锁,对锁机制理解不清的话,程序出现了问题也很难找到原因,在此记录一下线程的执行以及各种锁. 1.JAVA中,每个对象有且只有一把锁(lock),也叫监视器 ...
- Java并发编程:synchronized、Lock、ReentrantLock以及ReadWriteLock的那些事儿
目录 前言 synchronized用法 修饰方法 修饰实例方法 修饰静态方法 同步代码块 引出Lock Lock用法 子类:ReentrantLock 读写分离锁:ReadWriteLock Loc ...
- java面试题之synchronized和lock有什么区别
synchronized和lock的区别: 类别 synchronized lock 存在层次 java的关键字,在jvm层面上 是一个类 锁的释放 1.以获取锁的线程执行完同步代码,释放锁 2.线程 ...
- Java线程同步(synchronized)——卖票问题
卖票问题通常被用来举例说明线程同步问题,在Java中,采用关键字synchronized关键字来解决线程同步的问题. Java任意类型的对象都有一个标志位,该标志位具有0,1两种状态,其开始状态为1, ...
- java线程学习之synchronized关键字
关键字synchronized的作用是实现线程间的同步.它的任务是对同步的代码加锁.一个代码块同时只能有同一个线程进行读和写操作,从而保证线程间是安全的. 线程安全的概念是:当多个线程访问某一个类(对 ...
- synchronized和Lock的异同
JAVA语言使用两种机制来实现堆某种共享资源的同步,synchronized和Lock.其中,synchronized使用Object对象本身的notify.wait.notifyAll调度机制,而l ...
随机推荐
- Java期末测试
会议预约管理信息系统(50分) 1.项目背景: 会议是企业进行决策.协商的重要组织形式,是企业日常办公处理事务的重要手段,是办公流程中不可缺少的重要环节,作为企业,如何有效的进行会议组织,管理 ...
- 基于ChatGPT的API的C#接入研究
今年开年,最火的莫过于ChatGPT的相关讨论,这个提供了非常强大的AI处理,并且整个平台也提供了很多对应的API进行接入的处理,使得我们可以在各种程序上无缝接入AI的后端处理,从而实现智能AI的各种 ...
- C#操作注册表简单教程(附带操作某数据库客户端注册表以实现重置试用期的效果)
前言: 使用Windows系统,经常会遇到需要做注册表的操作.例如,一些软件需要修改注册表.自己编写的软件需要新建注册表进行写入注册信息等等.以下内容以某常见的数据库操作客户端为例,做一个注册表操作的 ...
- Java基础语法:运算符、包机制、JavaDoc
Java基础语法:运算符.包机制.JavaDoc 自增.自减.一元运算符:++.-- 例子:b = a++; -->先给b赋值,a再自增:b=a; a=a+1; b = ++a; -->a ...
- Uncaught ReferenceError: Cannot access 'constantRouterMap' before initialization
这个问题可以在 main.js 中,调整 import store from '@/store 和 import router from @/router 的先后顺序进行解决 router 在 s ...
- 基于C++的OpenGL 02 之着色器
1. 概述 本文基于C++语言,描述OpenGL的着色器 环境搭建以及绘制流程可参考: 基于C++的OpenGL 01 之Hello Triangle - 当时明月在曾照彩云归 - 博客园 (cnbl ...
- Django中models的字段
常见的field类型: 1.AutoField 自增字段,它是一个根据ID自增长的IntegerField字段,通常不用自己设置,如果没有设置主键,django会自动添加它为主键字段 2.CharFi ...
- VMwareSDN环境配置之git安装
------------恢复内容开始------------ null ------------恢复内容结束------------
- 代码随想录 day0 博客怎么写
前言 2.25日开始记录自己的博客生涯以及代码随想录训练营的每日内容 一.题目链接怎么找?怎么设置连接? 力扣题目链接1:力扣 二.正文怎么写? 二分查找 算法思路: 二分查找需要保证数组为有序数组同 ...
- Java通过注解获取方法反射运行
//上下文 @Resource private ApplicationContext applicationContext; @Bean public void test(){ //扫描Control ...