同步函数死锁现象

多线程:一个进程中有多个线程可以同时执行任务

多线程的好处:

1、解决一个进程中可以同时执行多个任务的问题。

2、提高了资源利用率

多线程的弊端:

1、增加了CPU的负担

2、降低了一个进程中线程的执行概率

3、出现了线程安全问题

4、会引发死锁现象

自定义线程的实现方式:

方式一:

1、自定义一个类继承Thread类。

2、重写Thread类的run方法,把自定义线程的任务代码写在run方法上

3、创建Thread的子类对象,并且调用start方法启动一个线程

 

线程安全问题出现的根本原因:

1、存在两个或两个以上的线程共享同一资源

2、多谢操作共享资源的代码有多行

 

同步函数:使用synchronized修饰的函数

同步函数要注意的事项:

1、如果是一个非静态的同步函数的锁对象是this对象,如果是静态的同步函数的锁对象是当前函数所属的类的字节码文件(class对象)。

2、同步函数的锁对象是固定的,不能由你来指定。

package com.longteng.lesson2;public class SaleTicket extends Thread {static  int count = 5000;public SaleTicket(String name){super(name);}@Overridepublic synchronized void run(){while(true){if (count > 0) {count = count -1000;System.out.println (Thread.currentThread ().getName () + "取走了1000块,还剩余" + count + "");} else {System.out.println ("取完了。。");break;}}}public static void main(String[] args) {SaleTicket thread1 = new SaleTicket ("老公");SaleTicket thread2 = new SaleTicket ("老婆");thread1.start ();thread2.start ();}
}
老婆取走了1000块,还剩余3000元
老婆取走了1000块,还剩余2000元
老婆取走了1000块,还剩余1000元
老婆取走了1000块,还剩余0元
取完了。。
老公取走了1000块,还剩余4000元
取完了。。

 

推荐使用同步代码块

1、同步代码块的锁由我们随意指定,方便控制,同步函数的锁对象是固定的

2、同步代码块可以很方便控制需要被同步代码的范围,同步函数必须是整个函数的所有代码都被同步

 

java中的同步机制解决了线程安全的问题,但同时也引发了死锁现象

 

转载于:https://www.cnblogs.com/zhou-test/p/9873959.html

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

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

相关文章

netstat 在windows下和Linux下查看网络连接和端口占用

假设忽然起个服务,告诉我8080端口被占用了,OK,我要去看一下是什么服务正在占用着,能不能杀 先假设我是在Windows下: 第一列: Proto 协议 第二列: 本地地址【ip端口】 第三列:远程地址…

selenium 解析网页_用Selenium进行网页搜刮

selenium 解析网页网页抓取系列 (WEB SCRAPING SERIES) 总览 (Overview) Selenium is a portable framework for testing web applications. It is open-source software released under the Apache License 2.0 that runs on Windows, Linux and macOS. Despite serving its m…

表的设计与优化

单表设计与优化 1)设计规范化表,消除数据冗余(以使用正确字段类型最明显): 数据库范式是确保数据库结构合理,满足各种查询需要、避免数据库操作异常的数据库设计方式。满足范式要求的表,称为规范…

代理ARP协议(Proxy ARP)

代理ARP(Proxy-arp)的原理就是当出现跨网段的ARP请求时,路由器将自己的MAC返回给发送ARP广播请求发送者,实现MAC地址代理(善意的欺骗),最终使得主机能够通信。 图中R1和R3处于不同的局域网&…

hive 导入hdfs数据_将数据加载或导入运行在基于HDFS的数据湖之上的Hive表中的另一种方法。

hive 导入hdfs数据Preceding pen down the article, might want to stretch out appreciation to all the wellbeing teams beginning from cleaning/sterile group to Nurses, Doctors and other who are consistently battling to spare the mankind from continuous Covid-1…

Java性能优化

一、避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快。 例子: import java.util.vector; class …

对Faster R-CNN的理解(1)

目标检测是一种基于目标几何和统计特征的图像分割,最新的进展一般是通过R-CNN(基于区域的卷积神经网络)来实现的,其中最重要的方法之一是Faster R-CNN。 1. 总体结构 Faster R-CNN的基本结构如下图所示,其基础是深度全…

大数据业务学习笔记_学习业务成为一名出色的数据科学家

大数据业务学习笔记意见 (Opinion) A lot of aspiring Data Scientists think what they need to become a Data Scientist is :许多有抱负的数据科学家认为,成为一名数据科学家需要具备以下条件: Coding 编码 Statistic 统计 Math 数学 Machine Learni…

postman 请求参数为数组及JsonObject

2019独角兽企业重金招聘Python工程师标准>>> 1. (1)数组的请求方式(post) https://blog.csdn.net/qq_21205435/article/details/81909184 (2)数组的请求方式(get) http://localhost:port/list?ages10,20,30 后端接收方式: PostMa…

领扣(LeetCode)对称二叉树 个人题解

给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1/ \2 2/ \ / \ 3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1/ \2 2\ \3 3说明: 如果你可以运用递归和迭代两种方法解决这个问题&#…

python 开发api_使用FastAPI和Python快速开发高性能API

python 开发apiIf you have read some of my previous Python articles, you know I’m a Flask fan. It is my go-to for building APIs in Python. However, recently I started to hear a lot about a new API framework for Python called FastAPI. After building some AP…

Purley平台Linpak测试,从踏坑开始一步步优化

Purley平台Linpak测试,从踏坑开始一步步优化 #记2017年11月第一次踏坑事件 测试平台配置: 6nodes CPU: Intel Gold 6132 2.6GHz 14C RAM: 8G *12 2666MHz NET: Infiband FDR OS: centos7.2 mpi: Intel-mpi hpl: xhpl.intel 开始踏第一坑 现象&#xff1a…

基于easyui开发Web版Activiti流程定制器详解(一)——目录结构

题外话(可略过): 前一段时间(要是没记错的话应该是3个月以前)发布了一个更新版本,很多人说没有文档看着比较困难,所以打算拿点时间出来详细给大家讲解一下,…

HDOJ 2037:今年暑假不AC_大二写

AC代码&#xff1a; #include <iostream> #include <cstdio> #include <algorithm> #define Max 105 using namespace std;struct TimeList {int start;int end; }timelist[Max]; bool compare(TimeList a, TimeList b) {if(a.end b.end)return a.start &l…

基于easyui开发Web版Activiti流程定制器详解(二)——文件列表

&#xfeff;&#xfeff;上一篇我们介绍了目录结构&#xff0c;这篇给大家整理一个文件列表以及详细说明&#xff0c;方便大家查找文件。 由于设计器文件主要保存在wf/designer和js/designer目录下&#xff0c;所以主要针对这两个目录进行详细说明。 wf/designer目录文件详解…

杭电oj2047-2049、2051-2053、2056、2058

2047 阿牛的EOF牛肉串 1 #include<stdio.h>2 3 int main(){4 int n,i;5 _int64 s[51];6 while(~scanf("%d",&n)){7 s[1]3;s[2]8;8 for(i3;i<n;i){9 s[i] s[i-1]*2 s[i-2]*2; 10 } 11 print…

Power BI:M与DAX以及度量与计算列

When I embarked on my Power BI journey I was almost immediately slapped with an onslaught of foreign and perplexing terms that all seemed to do similar, but somehow different, things.当我开始Power BI之旅时&#xff0c;我几乎立刻受到了外国和困惑术语的冲击&am…

git 基本命令和操作

设置全局用户名密码 $ git config --global user.name runoob $ git config --global user.email testrunoob.comgit init:初始化仓库 创建新的 Git 仓库 git clone: 拷贝一个 Git 仓库到本地 : git clone [url]git add:将新增的文件添加到缓存 : git add test.htmlgit status …

基于easyui开发Web版Activiti流程定制器详解(三)——页面结构(上)

&#xfeff;&#xfeff;上一篇介绍了定制器相关的文件&#xff0c;这篇我们来看看整个定制器的界面部分&#xff0c;了解了页面结构有助于更好的理解定制器的实现&#xff0c;那么现在开始吧&#xff01; 首先&#xff0c;我们来看看整体的结构&#xff1a; 整体结构比较简单…

bzoj 4300 绝世好题 —— 思路

题目&#xff1a;https://www.lydsy.com/JudgeOnline/problem.php?id4300 记录一下 mx[j] 表示以第 j 位上是1的元素结尾的子序列长度最大值&#xff0c;转移即可。 代码如下&#xff1a; #include<iostream> #include<cstdio> #include<cstring> #include&…