Java synchronized 关键词详细说明

外置专业技能点系统进程和进程的定义

进程建立方法

进程的情况情况变换

线程安全的定义

synchronized 关键词的几类使用方法装饰非静态数据组员方式synchronized public void sync(){

}

装饰静态数据组员方式synchronized public static void sync(){

}

类锁编码块synchronized (类.class){

}

目标锁编码块synchronized (this|目标){

}

synchronized 装饰非静态方法时能够看作是锁 this 目标,装饰静态方法时能够看作是锁方式所属的类。

synchronized 关键词的压根体制

每个进程要想浏览被 synchronized 装饰的编码块,还要获得 synchronized 申明的锁。假如2个进程的总体目标是同一个锁,就会出現堵塞的状况,因此2个进程不可以另外浏览同一个锁下的编码,确保了c#多线程在实行时最后結果不容易错误。这与共享资源自变量是不是为静态数据不相干。

好多个事例

目标锁public class ThreadDemo extends Thread {

@Override

public synchronized void run() {

for (int i = 0; i

Main.i++;

}

System.out.println("实行进行");

}

}

立即将承继的 run() 方式标识为 synchronized ,功效是对 Main 类中的 i 自变量做 10000 次累积实际操作。public class Main {

static int i = 0;

public static void main(String[] args) throws InterruptedException {

ThreadDemo threadDemo=new ThreadDemo();

Thread t1 = new Thread(threadDemo);

Thread t2 = new Thread(threadDemo);

Thread t3 = new Thread(threadDemo);

Thread t4 = new Thread(threadDemo);

t1.start();

t2.start();

t3.start();

t4.start();

t1.join();

t2.join();

t3.join();

t4.join();

System.out.println(i);

}

}

//輸出結果:

//实行进行

//实行进行

//实行进行

//实行进行

//40000

能够看见当4个进程所有实行结束以后,自变量 i 取得成功的累积了 40000 次,沒有出現遗失实际操作的状况。

假如人们将 main() 方式改动以下:public static void main(String[] args) throws InterruptedException {

Thread t1 = new ThreadDemo();

Thread t2 = new ThreadDemo();

Thread t3 = new ThreadDemo();

Thread t4 = new ThreadDemo();

t1.start();

t2.start();

t3.start();

t4.start();

t1.join();

t2.join();

t3.join();

t4.join();

System.out.println(i);

}

//輸出結果:

//实行进行

//实行进行

//实行进行

//实行进行

//27579

能够看见遗失了许多的累积实际操作。观查前后左右2个 main() 方式建立进程的方法能够发觉,前边的 main() 方式是应用了同一个目标来建立了4个不一样的进程,然后一个 main() 方式应用了4个不一样的 ThreadDemo 目标建立了4个进程。人们用 synchronized 装饰的是一个非静态数据友元函数,等于对该方式建立了 this 的目标锁。在第一个 main() 方式中应用同一个目标来建立 4 个不一样进程就会让 4 个进程角逐同一个目标锁,那样,在同一时间内,仅能有一个进程能浏览 synchronized 装饰的方式。而在第二种 main() 方式中,4 个进程分别相匹配一个目标锁,4 个进程中间沒有市场竞争关联,目标锁当然没法起效。

类锁public class ThreadDemo extends Thread {

@Override

public void run() {

synchronized (ThreadDemo.class) {

for (int i = 0; i

Main.i++;

}

System.out.println("实行进行");

}

}

}

将装饰方式的 synchronized 改成对 ThreadDemo.class 锁上的编码块public class ThreadDemo2 extends Thread {

@Override

public void run() {

synchronized (ThreadDemo2.class) {

for (int i = 0; i

Main.i++;

}

System.out.println("实行进行");

}

}

}

再建立一个同样的类取名为 ThreadDemo2 ,与 ThreadDemo 不一样的是,ThreadDemo2 中,synchronized 对 ThreadDemo2.class 锁上。public static void main(String[] args) throws InterruptedException {

Thread t1 = new ThreadDemo();

Thread t2 = new ThreadDemo();

Thread t3 = new ThreadDemo2();

Thread t4 = new ThreadDemo2();

t1.start();

t2.start();

t3.start();

t4.start();

t1.join();

t2.join();

t3.join();

t4.join();

System.out.println(i);

}

//輸出結果:

//实行进行

//实行进行

//实行进行

//实行进行

//33054

4 个进程各自由 ThreadDemo 和 ThreadDemo2 来建立,显而易见获得的結果与预估的 40000 不符合。假如人们将 ThreadDemo2 中的 synchronized 改成对 ThreadDemo.class 锁上:public class ThreadDemo2 extends Thread {

@Override

public void run() {

synchronized (ThreadDemo.class) {

for (int i = 0; i

Main.i++;

}

System.out.println("实行进行");

}

}

}

//輸出結果:

//实行进行

//实行进行

//实行进行

//实行进行

//40000

能够看见,尽管是申明在2个不一样的类中的 synchronized 编码块,可是因为全是对 ThreadDemo.class 锁上,因此 4 个进程中间還是创建了市场竞争关联,另外只有有一个进程浏览被 synchronized 装饰的编码。

java实现关键词云_Java synchronized 关键词详细说明相关推荐

  1. java实现关键词云_Java synchronized 关键字的实现原理

    数据同步需要依赖锁,那锁的同步又依赖谁?synchronized给出的答案是在软件层面依赖JVM,而Lock给出的方案是在硬件层面依赖特殊的CPU指令,大家可能会进一步追问:JVM底层又是如何实现sy ...

  2. java制作月度报表_Java报表制作详细过程

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 一般来说,一个完整的java报表设计流程,大体分为如下几个步骤: 1:打开设计器 2:配置数据源 3:新建报表 4:配置私有数据源 5:报表设计 6:预览 ...

  3. java保存登录信息_java – 保存登录详细信息(首选项)android

    我有一个具有登录,注销功能的Android应用程序.登录表单包含用户名和密码以及登录按钮.我想在用户选中"记住我"复选框时保存用户名和密码. 我的project.java文件如下所 ...

  4. java线程交替执行_Java synchronized线程交替运行实现过程详解

    背景 用两个线程交替输出A-Z和1-26,即一个线程输出A-Z,另一个线程输出1-26 而且是交替形式 线程1输出A--线程二输出1 线程1输出B--线程二输出2 线程1输出C--线程二输出3 以此类 ...

  5. java并发中的Synchronized关键词

    文章目录 为什么要同步 Synchronized关键词 Synchronized Instance Methods Synchronized Static Methods Synchronized B ...

  6. java同步关键词解释、synchronized、线程锁(Lock)

    1.java同步关键词解释 21.1 synchronized synchronized是用来实现线程同步的!!! 加同步格式: synchronized( 需要一个任意的对象(锁) ){ 代码块中放 ...

  7. 云java编程_学堂云_Java程序设计概论-第1部分开始使用Java编程

    学堂云_Java程序设计概论-第1部分开始使用Java编程 更新时间:2020-07-30 11:33点击: If tourists had known the tsunami was occurri ...

  8. 【线程同步】 Java 同步块(synchronized)详细说明

    我们在java开发中常常用synchronized( 互斥锁)来进行同步,但是对于 synchronized关键字有那些用法,会产生什么样的效果却不一定清楚,下面将详细介绍synchronized在程 ...

  9. CiteSpace关键词共现图谱含义详细解析

    CiteSpace关键词共现图谱含义详细解析 本文以CiteSpace软件做的关键词共现分析为例,进行关键词共现图谱含义详细解析. 关键词是一篇论文的核心概括,对论文关键词进行分析可对文章主题窥探一二 ...

最新文章

  1. 横竖屏切换时Activity的生命周期
  2. PCL1.8.0+VS2013+Win10 x64的配置教程
  3. Linux命令 -- ps
  4. error: No resource identifier found for attribute ‘backIcon’ in package
  5. 给phpcms v9增加类似于phpcms 2008中的关键词表
  6. perl数组硬引用_Perl个人总结
  7. Oracle分析函数-rank() over(partition by...order by...)
  8. PHP 比较两个文本文件差异 A diff implementation for PHP
  9. Web中树形数据(层级关系数据)的实现—以行政区树为例
  10. java基础-冒泡排序
  11. 0538-实战将lnmp服务中的上传目录独立分离到nfs服务器
  12. 互联网30年,泡沫如梦,一个个泡沫和风口过后,会是什么样的结局
  13. 计算机教师所需技能,信息技术教师应具备哪些教学技能
  14. CentOS7通过SpeedTest工具网络测速
  15. 入职地府后我成了人生赢家_129、新鬼入职|入职地府后我成了人生赢家|入职地府后我成了人生赢家章节阅读-龙族小说网...
  16. NEO改进协议提案9(NEP-9)
  17. node进程cpu 100%问题排查
  18. 做程序员累了想要转行?我想给大家分享一下看法
  19. html5 web speech,Web Speech
  20. 《Linux 高级路由与流量控制手册(2012)》第九章

热门文章

  1. 莫名其妙的主机名 VM_32_234_centos
  2. FZU Problem 2030 括号问题
  3. 【亲身经验】如何在 6 个月内成为“微软 MVP”
  4. 一行代码完成定时任务调度,基于Quartz的UI可视化操作组件 GZY.Quartz.MUI
  5. .NET 云原生架构师训练营(系统架构)--学习笔记
  6. 官宣!.NET官网发布中⽂版
  7. 开源推荐:Asp.Net Core入门学习手册!
  8. C# 9 新特性——init only setter
  9. 推荐一款.NET Core开源爬虫神器:DotnetSpider
  10. 使用Docker-Compose搭建高可用redis哨兵集群