java线程三部分_java 多线程三

注意到 java 多线程一 中 MyThread2 运行结果出现0、-1,那是因为在操作共享数据时没有加锁导致。

加锁的方式:

1、同步方法

2、同步代码块

3、锁

读过 java.util.concurrent 集合源码就知道:

HashMap:

public V put(K key, V value) {...}

Hashtable:

public synchronized V put(K key, V value) {...}

ConcurrentHashMap:

final V putVal(K key, V value, boolean onlyIfAbsent) {

...

synchronized (f) { ...}

}

CopyOnWriteArrayList:

public void add(int index, E element) {

final ReentrantLock lock = this.lock;

lock.lock();

try {

...

} finally {

lock.unlock();

}

}

我们最好只同步修改数据的部分,其他的尽量不要去同步(特别是耗时的,比如sleep()..io..)

class MyThread2 implements Runnable {

int tickets = 5;

public void run() {

for (; tickets > 0; ) {

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

synchronized (this){

if (tickets>0){

System.out.println(Thread.currentThread().getName() + ":" + tickets--);

}

}

}

}

}

输出:

MyThread2_1:5

MyThread2_2:4

MyThread2_3:3

MyThread2_1:2

MyThread2_2:1

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

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

相关文章

python简述定义函数的规则_Python的函数定义

有经验的程序员往往将功能较为独立、且可以被重复使用的代码块封装成函数,可以有效提高代码的模块化、解耦性和重复利用率。我们前面用到的print()函数就是Python的内建函数,我们也可以根据Python给我们提供的规则进行自定义函数。这里我们用PyCharm来进…

jdk中java_怎样使用JavaJDK中Java?

什么是UDP协议 UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据包。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据报分组、组装和不能对数据包的排序的缺点,也就是说,当报文发…

python中table表结构_python中的简易表格prettytable

安装:pip install PrettyTable普通表格from prettytable import PrettyTabletable PrettyTable([编号,云编号,名称,IP地址])table.add_row([1,server01,服务器01,172.16.0.1])table.add_row([2,server02,服务器02,172.16.0.2])table.add_row([3,server03,服务器03,…

java 类型推理_java 11 局部变量类型推断

什么是局部变量类型推断?var javastack "javastack";System.out.println(javastack);大家看出来了,局部变量类型推断就是左边的类型直接使用 var 定义,而不用写具体的类型,编译器能根据右边的表达式自动推断类型&#…

python笨办法_笨办法学Python(十)

习题 10: 那是什么?在习题 9 中我你接触了一些新东西。我让你看到两种让字符串扩展到多行的方法。第一种方法是在月份之间用 \n (back-slash n )隔开。这两个字符的作用是在该位置上放入一个“新行(new line)”字符。使用反斜杠 \ (back-slash) 可以将难打印出来的字…

java什么变量用作英文_Java基础之变量-什么是变量

什么是变量:在计算机语言中用来存储计算结果或表示值如何命名Java变量:如同酒店会给每个房间起个性化的名字一样,程序中的变量也需要用合理的名字进行管理—变量名!变量命名要符合以下规则:首字母必须是大写或小写的英文字母可以用下划线_开头可以用美元…

vue保存图片到手机相册_手机照片误删了怎么找回?这三个方法轻松搞定,亲测有效...

手机照片误删了怎么找回?很多人在使用手机拍照时,都会出现拍好的照片不小心点击了删除等情况,比如去某个地方游玩,或者看到了某个特别的场景拍下来的时候不小心删除了,那就非常可惜了,那么如何找回手机中误…

lsm tree java_BasicTreeUI

方法详细信息createUI public static ComponentUI createUI​(JComponent x)构造一个BasicTreeUI的新实例。参数x - 一个组件结果BasicTreeUI的新实例getHashColor protected Color getHashColor()返回散列颜色。结果哈希颜色setHashColor protected void setHashColor​(Color…

vue if判断_VUE学习记录2

v-if、v-eles、v-else-if​ v-if用于条件判断&#xff0c;判断Dom元素是否显示。<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scal…

利用melendy插入参考文献_四苯基卟啉在改性磷酸锆层间的插入及荧光增强

一、摘要近年来&#xff0c;出于节约一次性能源的考虑&#xff0c;人们已经加大对太阳能等天然资源的利用&#xff0e;致力于模拟天然光合作用的研究&#xff0c;而光合作用中的捕光复合物又称为光子天线。光子天线中往往存在一种或几种猝灭剂&#xff0c;猝灭剂吸收光子后产生…

java cmd停服务_java代码启动cmd执行命令来开启服务出现无法连接的问题

我想使用openoffice的格式转换功能&#xff0c;需要先开启openoffice的服务&#xff0c;当我手动敲入命令的时候&#xff0c;是可以运行起来的&#xff0c;但是通过Java代码执行却出现拒绝连接的问题&#xff0c;请帮我看看怎么回事public static String soffice_host "1…

与时间相关的java源码_Java 基于当前时间获取和计算时间

import java.time.LocalDate;import java.time.LocalDateTime;import java.time.LocalTime;import java.time.Month;/**来自N o w J a v a . c o m - 时代Java**/public class Main {public static void main(String[] args){LocalTime time LocalTime.now();System.out.print…

python脚本自动统计excel_python脚本实现-excel二级统计

pandas和SQL数据分析实战视频教程统计excel C列 化学 和D列 补充申请 两个条件药品数量程序优势在于批量统计&#xff0c;把参数写到excel里&#xff0c;行为单位# -*- coding: utf-8 -*-"""Created on Thu Apr 7 08:38:51 2016content内容必须是逗号分隔&am…

java 1.8stream_java jdk1.8 使用stream流进行list 分组归类操作

我就废话不多说了&#xff0c;大家还是直接看代码吧~import com.alibaba.fastjson.JSON;import java.util.ArrayList;import java.util.List;import java.util.stream.Collectors;/*** author czw*/public class Foo{private String name;private String type;private Double t…

百度链接解析_【集合】百度分享链接解析的方法总结

请大家在使用所有方法之前请先查看菜单栏中的用前必看01在别人分享的链接前面加 http://pan.naifei.cc/? 然后放入浏览器就可以解析了。比如: http://pan.naifei.cc/?链接:https://pan.baidu.com/s/XXX 提取码:1234 复制这段内容后打开百度网盘手机App&#xff0c;操作更方…

table表头固定4种方法_在常见的3种工资条场景中,教你4种批量打印工资条的方法...

私信回复关键词【福利】~获取丰富办公资源&#xff0c;助你高效办公早下班&#xff01;打印工资条估计是财务老师的痛&#xff0c;要把一行行的数据&#xff0c;变成一条条的工资条。数据很多&#xff0c;表头很复杂。一个个复制粘贴&#xff1f;那是不可能的&#xff01;那怎么…

hbase java api最新版本_HBase基本命令与新版本Java API

简介有关HBase的安装可以参考hbase安装我们可以通过hbase shell和hbase数据库进行交互&#xff0c;也可以通过Java-api和hbase数据库交互&#xff0c;这里我们使用的是hbase-client。主要是介绍2.0重大重构之后的api的基本使用。命名空间#列出所有命名空间list_namespace#新建命…

leetcode 贪心_贪心算法:给我最好的,现在就要!

每次做选择的时候都做出当下最好的选择&#xff0c;而不考虑将来的后果。并且期望最终得到的结果是全局最优的。 ——贪心算法 - Greedy Algorithm什么时候该使用贪心算法针对一组数据&#xff0c;定义了限制值。现在需要我们从中选出几个数据&#xff0c;在满足限制值的情况下…

java导致native非法指令,Java代码引起的NATIVE野指针问题(上)

朴英敏&#xff0c;小米MIUI部门。从事嵌入式开发和调试工作8年多&#xff0c;擅长逆向分析方法&#xff0c;主要负责解决安卓系统稳定性问题。上周音乐组同事反馈了一个必现Native Crash问题&#xff0c;tombstone如下&#xff1a; pid: 5028, tid: 5028, name: com.miui.play…

axure怎么做5秒倒计时_罗胖60秒:怎么做一个课程?

今天是罗胖陪伴你的第 2714 天1. 我们在研发课程的时候&#xff0c;有一个很关键的方法&#xff0c;我们内部称之为叫“不是而是”大法。2. 什么意思呢&#xff1f;就是如果你只告诉别人它是什么&#xff0c;那等于啥都没说。比如&#xff0c;我告诉你要经营好一家小店&#xf…