* 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的异同的更多相关文章

  1. Java多线程之线程同步【synchronized、Lock、volatitle】

    线程同步 线程同步:当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作,而其他线程又处于等待状态,实现线程同步的方法有很多. ...

  2. java中synchronized与Lock的异同

    本文转载自java中synchronized与Lock的异同 前言 synchronized和Lock通过互斥保障原子性,能够保护共享数据以实现线程安全,其作用包括保障原子性.可见性.有序性 常见问题 ...

  3. JAVA 线程状态以及synchronized,wait,sleep,yield,notify,notifyAll

    java线程存在以下几种状态: 1: 创建状态(New):线程被new出来,还未调用start 2: 就绪状态(Runnable):又称为可执行状态,调用线程的start方法后,线程处于就绪状态,,线 ...

  4. (删)Java线程同步实现二:Lock锁和Condition

    在上篇文章(3.Java多线程总结系列:Java的线程同步实现)中,我们介绍了用synchronized关键字实现线程同步.但在Java中还有一种方式可以实现线程同步,那就是Lock锁. 一.同步锁 ...

  5. Java线程锁,synchronized、wait、notify详解

    (原) JAVA多线程这一块有点绕,特别是对于锁,对锁机制理解不清的话,程序出现了问题也很难找到原因,在此记录一下线程的执行以及各种锁. 1.JAVA中,每个对象有且只有一把锁(lock),也叫监视器 ...

  6. Java并发编程:synchronized、Lock、ReentrantLock以及ReadWriteLock的那些事儿

    目录 前言 synchronized用法 修饰方法 修饰实例方法 修饰静态方法 同步代码块 引出Lock Lock用法 子类:ReentrantLock 读写分离锁:ReadWriteLock Loc ...

  7. java面试题之synchronized和lock有什么区别

    synchronized和lock的区别: 类别 synchronized lock 存在层次 java的关键字,在jvm层面上 是一个类 锁的释放 1.以获取锁的线程执行完同步代码,释放锁 2.线程 ...

  8. Java线程同步(synchronized)——卖票问题

    卖票问题通常被用来举例说明线程同步问题,在Java中,采用关键字synchronized关键字来解决线程同步的问题. Java任意类型的对象都有一个标志位,该标志位具有0,1两种状态,其开始状态为1, ...

  9. java线程学习之synchronized关键字

    关键字synchronized的作用是实现线程间的同步.它的任务是对同步的代码加锁.一个代码块同时只能有同一个线程进行读和写操作,从而保证线程间是安全的. 线程安全的概念是:当多个线程访问某一个类(对 ...

  10. synchronized和Lock的异同

    JAVA语言使用两种机制来实现堆某种共享资源的同步,synchronized和Lock.其中,synchronized使用Object对象本身的notify.wait.notifyAll调度机制,而l ...

随机推荐

  1. 【eslint 插件开发】禁用 location 跳转外部链接

    背景 公司 h5 项目需要为跳转的外部链接统一增加参数.举个例子,假设有如下代码: location.href = 'https://www.test.com/a?id=xxx' location.r ...

  2. 【Gerald and Giant Chess】

    一道计数类DP例题~~~ ps:P党似乎不多了-- 我这只蒟蒻第一次写题解,而且计数类DP还是早上刚学的,现学现用,或者说是所谓的"浅谈"一番吧!况且这题写题解的人似乎并不多(大佬 ...

  3. JZOJ 5174

    \(\text{Problem}\) 给你一张 \(n\) 个结点,\(m\) 条边的无向图,每个结点都有一个整数权值.你需要执行一系列操作.操作分为三种,如下表所示. 操作 备注 \(\text{D ...

  4. CF1742G Orray

    题目传送门 思路 大抵算是一道位运算入门题? 首先为了使 \(b_i\) 的字典序最大,我们注意到 \(b_1=a_1\),所以 \(a_1\) 必然是序列中最大的那个数. 接下来考虑贪心,设当前已经 ...

  5. LeetCode-780 到达终点

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reaching-points 题目描述 给定四个整数 sx , sy ,tx 和 ty,如果通过 ...

  6. linus->查看文件及文件夹大小相关命令

    背景: 经常会遇到服务器服务突然停了,去服务器一看服务正常运行. 然后在排查服务器容量,发现100%使用. 那么记下来一些常用命令是有必要的. 相关命令: df -hl   查看占用情况. du -s ...

  7. 多个module的verilog文件分割为多个文件

    python 分割含有多个module的verilog文件,按照module名来命名文件 import re # 读取 Verilog 文件 with open('test.v', 'r') as f ...

  8. ROS1 Qt5 CMake基本配置

    ############################################################################## # CMake ############# ...

  9. 去除button默认样式

    不加样式之前的: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  10. linux 端口的相关命令

    查看某个端口是否开发 isof -i:端口 说明:如果有显示说明已经开放了,如果没有显示说明没有开放 开放端口之后,查看防火墙是否对端口开放 查询端口号80 是否开启: firewall-cmd -- ...