java syncr_JAVA基础—Synchronized线程同步机制

Synchronize的使用场景

Synchronize可以使用在一下三种场景,对应不同的锁对象

场景

synchronized代码块

synchronized方法

synchronized静态方法

锁对象

任意对象

this 对象

该类的字节码对象 *.class

没有同步代码实例

public class SyncSample {

public static void main(String[] args) {

Couplet couplet = new Couplet();

for (int i = 1; i < 1000; i++)

new Thread() {

public void run() {

int r = new Random().nextInt(2);

if (r % 2 == 0){

couplet.first();

}else {

couplet.second();

}

}

}.start();

}

}

class Couplet {

public void first() {

System.out.printf("琴");

System.out.printf("瑟");

System.out.printf("琵");

System.out.printf("琶");

System.out.println();

}

public void second() {

System.out.printf("魑");

System.out.printf("魅");

System.out.printf("魍");

System.out.printf("魉");

System.out.println();

}

}

运行结果

...

魑魅魍魉

琴瑟琵琶

琴瑟琴瑟琵琶

魍魉

琴瑟琵琶

琴瑟琵魅魍魉

魑魅瑟琵琶

1. synchronized代码块 解决

class Couplet {

//创建锁对象 可以是任意对象 也可用当前对象this

Object lock = new Object();

public void first() {

//代码块 需要有锁对象

synchronized (lock) {

System.out.printf("琴");

System.out.printf("瑟");

System.out.printf("琵");

System.out.printf("琶");

System.out.println();

}

}

public void second() {

//代码块 需要有锁对象

synchronized (lock) {

System.out.printf("魑");

System.out.printf("魅");

System.out.printf("魍");

System.out.printf("魉");

System.out.println();

}

}

}

运行结果

琴瑟琵琶

魑魅魍魉

琴瑟琵琶

魑魅魍魉

2. synchronized方法 同步方法解决

class Couplet {

//同步方法 this当前对象就是锁对象

public synchronized void first() {

System.out.printf("琴");

System.out.printf("瑟");

System.out.printf("琵");

System.out.printf("琶");

System.out.println();

}

//代码块与同步方法 同步时 使用this当前对象

public void second() {

synchronized (this){

System.out.printf("魑");

System.out.printf("魅");

System.out.printf("魍");

System.out.printf("魉");

System.out.println();

}

}

}

运行结果

琴瑟琵琶

魑魅魍魉

琴瑟琵琶

魑魅魍魉

3. synchronized静态方法

class Couplet {

//静态同步方法 当前对象.class 的字节码对象就是锁对象

public synchronized static void first() {

System.out.printf("琴");

System.out.printf("瑟");

System.out.printf("琵");

System.out.printf("琶");

System.out.println();

}

//代码块与静态方法同步时 使用当前字节码锁对象

public void second() {

synchronized (Couplet.class){

System.out.printf("魑");

System.out.printf("魅");

System.out.printf("魍");

System.out.printf("魉");

System.out.println();

}

}

}

运行结果

琴瑟琵琶

魑魅魍魉

琴瑟琵琶

魑魅魍魉

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

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

相关文章

Windows Embedded CE 6.0开发初体验(三)设置Boot-loader

在Digi CC 9P开发板中已经预置了Boot-loader和一个CE 6.0的系统&#xff0c;所以&#xff0c;我们直接启动开发板&#xff0c;就可以运行一个CE 6.0的操作系统。不过&#xff0c;我们的最终目的是要开发一个自己的CE 6.0平台&#xff0c;所以我们需要对Boot-loader中的一些系统…

【转】C++学习三 模板类出错总结(Missing template arguments before ‘L‘)

一、模板类的说明 模板类有一个好处是可以放宽你输入的数据类型。 比如有这样的一个函数&#xff1a; int add(int x, int y) {return xy; } 这个函数对于int类型的x,y才适合&#xff0c;但是如果我们希望计算float类型的呢&#xff1f; 这必须重新定义一个函数&#xff…

Flex 学习站点汇总,(FLEX学习站点、博客、论坛)

来自&#xff1a;http://www.zhuoqun.net/article.asp?id501不错的整理&#xff01;感谢原作者。今天把收藏夹共享出来&#xff0c;希望对学习Flex的人有所帮助。一、国外站点1.资源类Adobe Flex 2 Component Explorer&#xff1a; 官方的&#xff0c;展示了各种组件的用法&am…

java 延迟实例化_延迟初始化Spring Bean的几种方式

XML 配置:Java 注解:Lazy(true)Spring 中默认是非延迟加载Bean的,也就是提前把Bean初始化好,用的时候直接用. 优点是运行的时候比较快(提前初始化了,直接用). 缺点是启动慢和占用内存,因为要初始化很多Bean.延迟加载是需要的时候再去初始化Bean. 优点是解约内存,启动快(不需要提…

Windows Embedded CE 6.0开发初体验(四)跑个应用程序先

因为我们的开发板上已经预置了Windows CE 6.0的系统&#xff0c;所以我们可以先创建一个.NET CF的应用程序&#xff0c;来看一下如何将.NET CF程序部署到Digi开发板上。 第一步&#xff0c;首先在Visual Studio 2005中创建一个新的工程。这一步和开发普通的Windows Mobile应用…

【转】C++学习四 冒泡排序法的一些改进

冒泡排序法需要两次扫描&#xff0c;所以从时间复杂度来说&#xff0c;是O(n2). 如果用图形表示&#xff0c;是这样的&#xff1a; 但是我们可以加以改进。 首先是&#xff0c;如果在排序中间&#xff0c;整个向量已经达到了有序状态&#xff0c;可以直接跳出来。 这样它的复…

java中的jgroup_JGroups实现聊天小程序

本文实例为大家分享了JGroups实现聊天小程序的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下效果图&#xff1a;代码部分&#xff1a;package com.lei.jgoups;import java.io.BufferedReader;import java.io.DataInputStream;import java.io.DataOutputStream;impor…

Windows Embedded CE 6.0开发初体验(五)构建CE平台

接下来的一节会有非常多的图&#xff0c;因为我们要在Visual Studio 2005里创建一个CE 6.0的平台&#xff08;Platform&#xff09;了。创建CE平台的方法和创建普通工程的方法类似。在完成了Platform Builder之后&#xff0c;我们打开Visual Studio 2005后&#xff0c;选择File…

est.java 2 错误 找不到符号_找不到Cython/Python符号PyString\u Typ

我试图调用Cython的C代码&#xff0c;并遵循official guide。在但是&#xff0c;当在python中导入已编译的模块时&#xff0c;我得到以下错误。在---------------------------------------------------------------------------ImportError Traceback (most recent call last)i…

一步一步学Silverlight 2系列(31):图形图像综合实例—实现水中倒影效果

概述 Silverlight 2 Beta 1版本发布了&#xff0c;无论从Runtime还是Tools都给我们带来了很多的惊喜&#xff0c;如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython&#xff0c;对JSON、Web Service、WCF以及Sockets的支持等一系列新的特性。《一步一步学Silverlig…

Windows Embedded CE 6.0开发初体验(六)平台定制

Windows CE是一个组件化的操作系统&#xff0c;我们可以根据不同的环境设置不同的组件来组合成有针对性的平台&#xff0c;而一个功能往往需要多个组件才能够实现。Catalog就是实现某个功能的组件集合&#xff0c;每个Catalog Item会包含一个或多个组件&#xff0c;而Catalog I…

java lambda 循环list_Java8--Lambda表达式对List集合操作(一)

一、利用stream().forEach()遍历集合List list new ArrayList();list.add("djk");list.add("djk1");list.add("djk12");list.add("djk123");//利用stream().forEach()遍历集合list.stream().forEach(item->{System.out.print(item…

【转】Win32 SDK 实现带图片的 Button 控件BM_SETIMAGE(Disable时图片不显示)

在编写对话框程序时&#xff0c;希望能在按钮控件里显示一个小插图,如图所示 最初使用的方法是使用 BM_SETIMAGE 消息&#xff0c;但却不能达到满意的效果&#xff0c;在网上查了一通资料&#xff0c;最后终于实现了&#xff0c;现在把实现的方法记下来。 首先来到MSDN上&…

解读设计模式----命令模式(Command Pattern)

***本文与作者原文有一定的偏差,其中加入了一部分是个人看法,详细请查看作者原文。***原文连接http://www.dofactory.com/Patterns/PatternCommand.aspx命令模式意图&#xff1a;  GOF 在《设计模式》一书中阐述其意图&#xff1a;“将一个请求封装为一个对象&#xff0c;从而…

Windows Embedded CE 6.0开发初体验(七)编译和调试平台

在完成Catalog选择之后&#xff0c;平台定制的工作告一段落&#xff0c;接下来&#xff0c;我们就要进入变数最多的环节——“编译和调试”平台了。编译的操作简单&#xff0c;但是想通过编译却有很多变数。 编译平台的第一步是选择Debug或者Release版本。选择 Build菜单中的C…

python合并单元格 索引_python笔记:纵向合并表格

工作中我们常常遇到多个格式相同的表格面要合并成一个表格&#xff0c;比如将2019年的数据与2020年的数据合并在一起来进行分析。平时EXCEL时我们通常直接复制粘贴&#xff0c;但有时因表格内容过大&#xff0c;直接粘贴效率低&#xff0c;且当字段过多时还需要进行逐列粘取我们…

哈希表(HashTable)探究(转)

HashTable 通常称为哈希表&#xff0c;它表示键&#xff08;key&#xff09;/值&#xff08;value&#xff09;对的集合。 1、HashTable 的构造函数&#xff1a; HashTable() //初始化为0个元素的空实例 HashTable(Int32) //初始化为int32 个元素的…

【转】Win32子窗口控件(按钮、编辑框、静态框、滚动条等)!!

前言&#xff1a; 子窗口控件是特殊的子窗口&#xff0c;不需要我们注册窗口类&#xff0c;系统已经注册好了&#xff0c;我们只需要在创建时选择相应的窗口类名。常用的子窗口控件有按钮BUTTON、组合框COMBOBOX、编辑框EDIT、列表框LISTBOX、静态框STATIC、滚动条SCROLLBAR等类…

在PC上用模拟器搭建Windows Mobile仿真环境:Microsoft Device Emulator使用

因为工作需要&#xff0c;体验了一下微软的移动设备模拟器Device Emulator 3.0。在此把一些使用体验写出来和大家交流一下&#xff0c;在自己摸索过程中从网上找了很多资料参考&#xff0c;希望大家再做这个的时候少走一些弯路%^) 在PC上用模拟器搭建Windows Mobile仿真环境&am…

人生需要奋斗

看了几集电视剧 奋斗&#xff0c;有种特别的味道&#xff01;人生需要奋斗&#xff0c;沿着自己的目标&#xff0c;前进。FIGHTING 转载于:https://www.cnblogs.com/gxj760998/archive/2008/04/11/1147725.html