浅谈synchronized作用

  在开辟多个线程时候,synchronized将会发挥它的作用,下面写个测试Demo进行观察它的作用:

FirstThread runnThread = new FirstThread();
Thread thread1 = new Thread(runnThread);
Thread thread2 = new Thread(runnThread);
thread1.setName("线程A");
thread2.setName("线程B");
thread1.start();
thread2.start();

public static class FirstThread implements Runnable{
@Override
public void run() {
//synchronized (this) {
for (int i = 10; i > 0; i--) {
System.out.println(Thread.currentThread().getName()+i);
//}
}
}
}

这是在进程里开启了两个线程,并且开启子线程的程序是同一个的。运行程序显示结果:

线程B10
线程A10
线程B9
线程A9
线程B8
线程A8
线程B7
线程A7
线程B6
线程B5
线程B4
线程B3
线程B2
线程B1
线程A6
线程A5
线程A4
线程A3
线程A2
线程A1

可以看到即便线程B或者A运行时候,仍然会有另外一个线程抢占起来,占领线程,两个线程互相争抢。

但是加上synchronized (this) {}这句话同步锁,运行结果:

线程A10
线程A9
线程A8
线程A7
线程A6
线程A5
线程A4
线程A3
线程A2
线程A1
线程B10
线程B9
线程B8
线程B7
线程B6
线程B5
线程B4
线程B3
线程B2
线程B1

可以发现是一个线程的程序运行完才能运行下一个线程,即便在线程A运行时候线程B已经可以运行了,但是由于同步锁的作用是运行中的线程运行结束之后才能其它线程,避免了线程互扰的情况。

时间: 2024-07-30 13:39:07

浅谈synchronized作用的相关文章

浅谈AndroidManifest.xml与R.java及各个目录的作用

原文:浅谈AndroidManifest.xml与R.java及各个目录的作用 在开发Android项目中,AndroidManifest.xml与R.java是自动生成的.但是对于测试来说,非常重要.经过师父的点拨,我对AndroidManifest.xml与R.java有了更深一层的理解. AndroidManifest.xml会自动生成引用包的属性配置,有权限的管理作用.引用的package必须声明了权限才能使用. R.java是对资源的索引,自动标识资源索引,相当于资源字典,里面包含项目

sql之浅谈视图的作用

[数据库]☆★sql之浅谈视图的作用 在一个项目的实际开发过程中牵涉到复杂业务的时候,我们不可避免的需要使用中间表来进行数据连接,有的同学就说了,我可以采用Hibernate进行主外键进行关联啊?多对多,多对一,一对一,等,采用主外键关联在数据的操作过程中具有很强的耦合性,尤其对于需要经常删改数据表而言,我们是不建议采用主外键关联这种模式,那么,如果我们采用中间表的话,当数据过大在性能上又面临严峻考验,sql视图的出现,在解决中间表的业务逻辑上是不错的选择.ok,首先我们了解什么是视图? 1.视

对kotlin和java中的synchronized的浅谈

synchronized在java中是一个关键字,但是在kotlin中是一个内联函数.假如分别在java和kotlin代码锁住同一个对象,会发生什么呢,今天写了代码试了试.首先定义people类 12345678910111213 public class { public void () { for (int i = 0; i < 10; i ++) { try { Thread.sleep(50); } catch (InterruptedException e) { e.printStac

Android IPC之Messenger浅谈

之前写过一篇有关 IPC之AIDL浅谈的文章,详情请看Android IPC之AIDL浅谈.今天再来介绍另一种 IPC-Messenger. 一.概述. 首先看Messenger介绍, Reference to a Handler, which others can use to send messages to it. This allows for the implementation of message-based communication across processes, by c

[Android] [Java] Process 创建+控制+分析 经验浅谈

无论是Android亦或者Java中或多或少需要调用底层的一些命令,执行一些参数: 此时我们需要用到Java的Process来创建一个子进程,之所以是子进程是因为此进程依赖于发起创建请求的进程,如果发起者被Kill那个子进程也将Kill. 对于Process相信使用过的朋友一定不会陌生,它具有如下特点: 1.创建简单 2.控制难 3.容易导致无法创建子进程 4.如果是多线程那么很有可能造成内存溢出 以上现象如果你只是偶尔使用一次,创建一个进程或许你什么都没有感觉到,但是如果你使用了多线程,进行了

搞懂分布式技术16:浅谈分布式锁的几种方案

搞懂分布式技术16:浅谈分布式锁的几种方案 前言 随着互联网技术的不断发展,数据量的不断增加,业务逻辑日趋复杂,在这种背景下,传统的集中式系统已经无法满足我们的业务需求,分布式系统被应用在更多的场景,而在分布式系统中访问共享资源就需要一种互斥机制,来防止彼此之间的互相干扰,以保证一致性,在这种情况下,我们就需要用到分布式锁. 分布式一致性问题 首先我们先来看一个小例子: 假设某商城有一个商品库存剩10个,用户A想要买6个,用户B想要买5个,在理想状态下,用户A先买走了6了,库存减少6个还剩4个,

浅谈CSS优先级机制(一)

初次写随笔,如果有哪个地方不足还望大神指点改正,下面我来谈谈我对于CSS优先级的了解吧. CSS优先级,通俗的理解就是你给元素等一堆属性描述,然后最后到底是哪个描述作为最终显示的效果的规则或机制(个人理解).以下我将分为几个点来谈谈优先级的确定. 1.引入方式: CSS引入的方式,我目前只知道四种:内联式.内嵌式.导入式.链接式(当然网上的说法名称不一,理解就好). 各种引入方式的用法我在这里就不再多说了.以上我所按顺序罗列的四个方式是理论上的优先级顺序,也就是说,我使用内联式引入的css代码作

浅谈Android多屏幕的事

浅谈Android多屏幕的事 一部手机可以同时看片.聊天,还可以腾出一支手来撸!这么吊的功能(非N版本,非第三方也能实现,你不知道吧)摆在你面前,你不享用?不关注它是怎样实现的?你来,我就满足你的欲望! 一部手机可以同时看片.聊天,还可以腾出一支手来撸==!就像这样: 是时候告别来回切换应用屏幕的酸爽了,还可以在分屏模式下两Activity间直接拖放数据! 好高大上的样子!这是怎么实现的?别急,我们一一道来: kitkat(4.4)版本对多任务分屏的实现 由于相关的代码和功能被封装及隐藏起来,所

浅谈web应用的负载均衡、集群、高可用(HA)解决方案(转)

1.熟悉几个组件 1.1.apache     —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安 全Socket层(SSL)等等,目前互联网主要使用它做静态资源服务器,也可以做代理服务器转发请求(如:图片链等),结合tomcat等 servlet容器处理jsp.1.2.ngnix     —— 俄罗斯人开发的一个高性能的 HTTP和反向代理服务器.由于Nginx 超越 Apache 的高性能和稳