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

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 装饰的编码。

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

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

相关文章

损失函数(Loss function) 和 代价函数(Cost function)

1损失函数和代价函数的区别: 损失函数(Loss function):指单个训练样本进行预测的结果与实际结果的误差。 代价函数(Cost function):整个训练集,所有样本误差总和(所有损失函数总和)的平均值。(这一步体现在propagate()…

Hadoop/HDFS命令

Hadoop中文手册:http://hadoop.apache.org/docs/r1.0.4/cn/commands_manual.html 英文手册:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/CommandsManual.html Hadoop fs命令 hadoop fs: 该命令可以用于其他文件系统&#x…

《Node.js 入门系列》—— 一些简单的排错方法(一)

目录 TypeError: undefined is not a functionTypeError: Cannot read property xxx of undefined 或者 TypeError: Cannot read property xxx of null检查变量是未赋值检查函数是否有返回值检查变量是否引用了某个对象不存在的属性检查调用函数时是否未该传递参数俗话说“常在…

内置IOC容器ServiceCollection

.NetCore内置IOC容器ServiceCollection一、IOC介绍IOC:全名(Inversion of Control)-控制反转IOC意味着我们将对象的创建控制权交给了外部容器,我们不管它是如何创建的,我们只需要知道,当我们想要某个实例时,我们可以直…

java中 有没有方法将浏览器标签栏去掉_用JS去掉IE窗口的标题栏,工具栏,地址栏...

前言:经常上网的朋友可能会到过这样一些网站,一进入首页立刻会弹出一个窗口,或者按一个连接或按钮弹出,通常在这个窗口里会显示一些注意事项、版权信息 、警告、欢迎光顾之类的话或者作者想要特别提示的信息。其实制作这样的页面效果非常的容…

React+Redux仿Web追书神器

引言 由于 10 月份做的 React Native 项目没有使用到 Redux 等库,写了一段时间想深入学习 React,有个想法想做个 demo 练手下,那时候其实还没想好要做哪一个类型的,也看了些动漫的,小说阅读,聚合资源的开源…

【算法】LeetCode算法题-Maximum Subarray

这是悦乐书的第154次更新,第156篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第13题(顺位题号是53)。给定一个整数数组nums,找出一个最大和,此和是由数组中索引连续的元素组成,至少包含一个…

windows配置solr5.5.2(不通过tomcat,使用内置jetty)

一、windows下配置solr5.5.2(不通过tomcat,使用内置jetty) 第一步:安装Jdk1.7 Solr5.5好像只支持Jdk1.7及以上的版本,没亲测,solr6.0是只支持jdk1.8及以上的,下图为启动solr时的截图: 如何在windows环境下配置jdk及验证…

java起源英文_Abbreviation 英文词组缩写(来源:南阳理工大学ACM)java

As we know, we often use a short sequence of characters in place of some words with a very long name. For example, ACM is an abbreviation of “Association for Computing Machinery”. Now we are using an acronymic method to get the abbreviation. An acronym i…

【C# Personal Handbook】运行环境

一、CLR、CLI、CTS、CLS、BCL、FCL简介CLI(公共语言基础)CLI是微软公司向ECMA提交的一份语言和数据格式规范,CLR是目前为止唯一一个公共语言基础的实现版本。CLI包括了公共类型系统(CTS)、公共中间语言(CIL…

如何完善自己的知识结构

★领域 (本来想用“学科”这个词,后来觉得“学科”的范畴还是偏小,就改用“领域”)  按照传统的习惯,通常会把知识归类到不同的领域(比如:文学、数学、计算机、烹调、等等)。 ◇领…

MATLAB编程与应用系列-关于MATLAB编程入门教程的总体编写安排

本系列教程来源于出版设计《基于MATLAB编程基础与典型应用书籍》,如涉及版权问题,请联系:156204968qq.com。 出版社:人民邮电出版社, 页数:525。 本系列教程目前基于MATLABR2006a,可能对于更高级…

python语言特性-------python2.7教程学习【廖雪峰版】(一)

开始学习廖雪峰的py2.7教程: 2017年6月5日12:54:28 笔记: 廖雪峰python2.7教程1.用任何编程语言来开发程序,都是为了让计算机干活。 2.Python是一种相当高级的语言。代码少还不好?代码少的代价是运行速度慢。3.用Python可以做什么…

java调c++代码_Java中调用C++代码的实现 | 学步园

JNI为 Java Native Interface 即Java本地接口,使用此种方式可以对C/C代码进行调用,其在本质上是对C/C生成的动态库进行调用而不是直接对C/C代码进行调用Java代码如下:public class TestJNI{//JNI在本质上是调用C/C的动态库来实现的&#xff…

jeesite1.X 集成多数据源

2019独角兽企业重金招聘Python工程师标准>>> 网上看了几个例子,都是相同数据源的动态切换,如果不是同一种数据库类型,分页查询就出问题。经过研究解决问题。 jeesite.properties配置多数数据源地址,这里以mysql5.7和sqlserver2008…

k8s HPA(HorizontalPodAutoscaler)-自动水平伸缩

Horizontal Pod Autoscaling in Kubernetes写在前面我们平时部署web服务,当服务压力大撑不住的时候,我们会加机器(加钱);一般没有上容器编排是手动加的,临时加的机器,临时部署的服务还要改Nginx的配置,最后…

jQuery 基金会和 Dojo 基金会合并:Open Web

统一基金会,服务开发人员,推动开放 Web 技术发展jQuery 基金会和 Dojo 基金会今天宣布计划联合,旨在建立最大,最多样化和最全面的基金会,通过服务开发者,他们的项目,他们的社区来构建开放的 Web…

spark java 逻辑回归_逻辑回归分类技术分享,使用Java和Spark区分垃圾邮件

原标题:逻辑回归分类技术分享,使用Java和Spark区分垃圾邮件由于最近的工作原因,小鸟很久没给大家分享技术了。今天小鸟就给大家介绍一种比较火的机器学习算法,逻辑回归分类算法。回归是一种监督式学习的方式,与分类类似…

jQuery.extend()方法

定义和用法jQuery.extend()函数用于将一个或多个对象的内容合并到目标对象。 注意: 1. 如果只为$.extend()指定了一个参数,则意味着参数target被省略。此时,target就是jQuery对象本身。通过这种方式,我们可以为全局对象jQuery添加…

1066. 图像过滤(15)

原题: https://www.patest.cn/contests/pat-b-practise/1066 思路: 开胃小菜 实现: #include <stdio.h>int main (void) {int m;int n;int a;int b;int c;char ch;int tmp;int i;int j;scanf("%d %d %d %d %d", &m, &n, &a, &b, &c);// 题…