回顾多线程

1.线程有几种状态

 public enum State {//新生NEW,//运行RUNNABLE,//阻塞BLOCKED,//等待WAITING,//超时等待TIMED_WAITING,//终止TERMINATED;}

2.wait和sleep的区别

1.来自不同的类

wait=>Object类   

sleep => Thread类

2.关于锁的释放

wait 会释放锁,

sleep 睡觉了,抱着锁睡觉,不会释放!

3.使用的范围是不同的

wait  必须在同步代码块中使用

sleep 可以在任何地方睡

4.是否可以需要捕获异常   都是中断异常

wait 需要捕获异常

sleep 也需要抛出异常

3.Lock锁(重点)

1.传统Synchronized

package com.kuang.lock;
//基本的卖票例子/*** 真正的多线程开发,公司中的开发,降低耦合性* 线程就是一个单独的资源类,他没有任何附属的操作!* 1.属性 、方法*/
public class SaleTicketDemo01 {public static void main(String[] args) {//并发:多线程操作同一个资源类,把资源类丢入线程。Ticket ticket = new Ticket();//@FunctionalInterface 函数式接口 ,jdk1.8 Lambda表达式 (参数) -> {代码}new Thread(()->{for (int i = 0; i < 60; i++) {ticket.sale();}},"A").start();new Thread(()->{for (int i = 0; i < 60; i++) {ticket.sale();}},"B").start();new Thread(()->{for (int i = 0; i < 60; i++) {ticket.sale();}},"C").start();}}// 资源类 OOP
class Ticket{// 属性、方法private int number=50;//卖票的方式public synchronized void sale(){if (number>0){System.out.println(Thread.currentThread().getName()+":卖出第"+(number--)+"张票,还剩"+number+"张票");}}}

2.lock接口

new FairSync()公平锁

new NonfairSync()非公平锁

公平锁:十分公平,可以先来后到

非公平锁:十分不公平,可以插队(默认)

3秒 和 3小时的 如果公平锁 3秒中必须等3小时之后才能执行,

但是插队的话,就是谁抢到,谁执行,而且是有锁的。

package com.kuang.lock;import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;public class SaleTicketDemo02 {public static void main(String[] args) {//并发:多线程操作同一个资源类,把资源类丢入线程。Ticket2 ticket = new Ticket2();new Thread(()->{for (int i = 0; i < 60; i++) ticket.sale();},"A").start();new Thread(()->{for (int i = 0; i < 60; i++) ticket.sale();},"B").start();new Thread(()->{for (int i = 0; i < 60; i++) ticket.sale();},"C").start();}
}// 资源类 OOP
class Ticket2 {// 属性、方法private int number = 50;//卖票的方式//lockLock lock =new ReentrantLock();public void sale() {lock.lock();//加锁try {//业务代码if (number > 0) {System.out.println(Thread.currentThread().getName() + ":卖出第" + (number--) + "张票,还剩" + number + "张票");}} catch (Exception e) {e.printStackTrace();} finally {lock.unlock();//解锁}}
}

3.Synchronized 和 Lock 区别

  1. Synchronized 内置的Java关键字,Lock是个 Java接口类。
  2. Synchronized 无法判断获取所得状态,Lock 可以判断是否获取到了锁。
  3. Synchronized 会自动释放锁,Lock必须要手动释放锁!如果不释放锁,死锁!
  4. Synchronized 线程1(获得锁,阻塞),线程2(等待,傻傻的等);Lock锁就不一定会等待下去;
  5. Synchronized 可重入锁,不可以中断的,非公平;Lock锁,可重入锁,可以 判断锁,非公平(可以自己设置);
  6. Synchronized 适合锁少量的代码同步问题,Lock适合锁大量的同步代码!

提问?:锁是什么?如何判断锁的是谁!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/79775.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于 Flink CDC 高效构建入湖通道

本文整理自阿里云 Flink 数据通道负责人、Flink CDC 开源社区负责人&#xff0c; Apache Flink PMC Member & Committer 徐榜江&#xff08;雪尽&#xff09;&#xff0c;在 Streaming Lakehouse Meetup 的分享。内容主要分为四个部分&#xff1a; Flink CDC 核心技术解析数…

Databend 开源周报第 110 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 使用 BendSQL 管…

uniapp微信小程序地图实现周边

官方说明&#xff1a;小程序JavascriptSDK使用指南 - 微信小程序解决方案 | 腾讯位置服务https://lbs.qq.com/product/miniapp/jssdk/ 先申请腾讯地图的开发者密钥&#xff0c;申请地址&#xff1a;腾讯位置服务 - 立足生态&#xff0c;连接未来 申请密钥时&#xff0c;需要勾…

USB接口针式打印机

1 针式打印机原理 - 针式打印机16针是纵向排列&#xff0c;每次打印垂直的16bit&#xff0c;然后右移一bit&#xff0c;继续下列打印&#xff1b;字节的MSB表示最上面的点&#xff0c;字节LSB表示最下面的点 - 由于汉字字模的点阵是横向排列的&#xff0c;而提供给打印头的信息…

轻量级的Python IDE —— Thonny

现在的开发工具太多了&#xff0c;而且每个开发工具都致力于做成最好用最智能的工具&#xff0c;所以功能越堆越多&#xff0c;越怼越智能。安装这些开发工具比较烧脑&#xff0c;经常需要经过许多配置步骤。作为一个 Python 开发者来说&#xff0c;好多人光是这些配置都要弄半…

Linux系统——远程连接Linux系统(图形化、命令行、使用命令行学习Linux系统、FinalShell)

目录 图形化、命令行 使用命令行学习Linux系统 FinalShell 安装 连接 图形化、命令行 对于操作系统的使用&#xff0c;有2种使用形式&#xff1a; 图形化页面使用操作系统以命令的形式使用操作系统 不论是Windows还是Linux亦或是MacOS系统&#xff0c;都是支持这两种使…

如何让两台手机相互远程控制?

你的两台手机是什么系统的&#xff1f;如果你的两台手机都是安卓系统&#xff0c;而且都是安卓7.0及以上版本的系统&#xff0c;那么恭喜你&#xff0c;这两台手机可以相互远程控制&#xff01; 你可以利用两个软件实现将两台手机相互远程控制的想法。为了避免混淆&#xff0c…

android 圆形进度条 横向进度条 不确定转圈进度条

1 横向进度条 <ProgressBarstyle"android:style/Widget.ProgressBar.Horizontal"android:layout_width"match_parent"android:layout_height"wrap_content"android:layout_gravity"center"android:max"100"android:secon…

14. 线性代数 - 线性方程组

文章目录 线性方程组矩阵行列式全排列和逆序数N阶行列式(非)齐次线性方程Hi,大家好。我是茶桁。 结束了「微积分」部分的学习之后我们稍作休整,今天正式开始另外一部分:「线性代数」的学习。小伙伴们放松完回来要开始紧张起来了。 我们之前说过,不管是哪一个工程学科,根…

基于JAVA+SSM+微信小程序+MySql的图书捐赠管理系统设计与实现

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 在当今社会&#xff0…

手机+卫星的科技狂想

最近硬件圈最火热的话题之一&#xff0c;应该就是突然上线、遥遥领先的华为Mate 60 Pro了。 其中&#xff0c;CPU和类5G网速是怎么实现的&#xff0c;是大家特别关注的问题。相比之下&#xff0c;卫星通话这个功能&#xff0c;讨论度就略低一些&#xff08;没有说不火的意思&am…

解决npm install遇到的问题:Error while executing:

目录 一、遇到问题 二、解决办法 三、备用方案 一、遇到问题 npm ERR! Error while executing: npm ERR! D:\IT_base\git\Git\cmd\git.EXE ls-remote -h -t ssh://gitgithub.com/sohee-lee7/Squire.git npm ERR! npm ERR! fatal: unable to access https://github.com/so…

安装Anaconda与pytorch,在IDEA中配置环境进行编程

1.官网下载与自己python版本匹配的Anaconda(注意&#xff0c;要想成功安装pytorch&#xff0c;python版本也要对应pytorch的相关版本) Anaconda官网最新版本 与自己python版本不否请查找自己版本anaconda版本对应 清华大学镜像下载 2.安装时勾选添加环境变量或者手动添加&am…

rocketmq

&#x1f353;代码仓库 https://gitee.com/xuhx615/rocket-mqdemo.git &#x1f353;基本概念 ⭐生产者(Producer)&#xff1a;消息发布者⭐主题&#xff08;Topic&#xff09;&#xff1a;topic用于标识同一类业务类型的消息⭐消息队列&#xff08;MessageQueue&#xff09…

el-table 列背景色渐变

最初的想法是&#xff0c;给每一行添加背景色&#xff0c;逐行递减透明度&#xff0c;发现结果比较突兀&#xff0c;效果如下&#xff1a; 如果有需要这种样式的&#xff0c;代码如下&#xff1a; <template><div><el-table:data"tableData":heade…

LeetCode_拓扑排序_BFS_中等_1462.课程表 IV

目录 1.题目2.思路3.代码实现&#xff08;Java&#xff09; 1.题目 你总共需要上 numCourses 门课&#xff0c;课程编号依次为 0 到 numCourses - 1 。你会得到一个数组 prerequisite &#xff0c;其中 prerequisites[i] [ai, bi] 表示如果你想选 bi 课程&#xff0c;你必须先…

在macOS使用VMware踩过的坑

目录 MAC提示将对您的电脑造成伤害/MAC OS 升级到10.15.3后vmware虚拟机黑屏 mac系统下&#xff0c;vm虚拟机提示打不开/dev/vmmon mac VMware Workstation 在此主机上不支持嵌套虚拟化 mac VMware清理虚拟机空间 VMware Fusion 13在M2芯片的Mac上安装 Windows 11 首先需…

精品SpringCloud的B2C模式在线学习网微服务分布式

《[含文档PPT源码等]精品基于SpringCloud实现的B2C模式在线学习网站-微服务-分布式》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;Java 框架&#xff1a;springcloud JDK版本&#xf…

Spring boot 实践(16)Nacos server 2.2.3 下载安装

1、Nacos server下载 登录网址Releases alibaba/nacos GitHub&#xff0c;进入下载页面&#xff0c;显示如下&#xff1a; 选择“nacos-server-2.2.3.zip”版本 解压缩&#xff0c;目录文件如下图所示&#xff1a; 配置文件位于“conf”目录下&#xff0c;名称为“applicat…

java在mysql中查询内容无法塞入实体类中,报错 all elements are null

目录 一、问题描述二、解决方案 一、问题描述 java项目中整体配置了mysql的驼峰式字段匹配规则。 mybatis.configuration.map-underscore-to-camel-casetrue由于项目需求&#xff0c;需要返回字段为file_id&#xff0c;file_url&#xff0c;并且放入实体类中&#xff0c;实体…