synchronized(互斥线程,类线程和对象线程),一段代码理解
下面直接运行即可.
package com.controller;/*** Created by** @author : zj* @date : 2018-08-20*/public class Test implements Runnable {public synchronized void run() {for (int i = 0; i < 10; i++) {System.out.println(Thread.currentThread().getName() + " synchronized loop " + i);}}public static void main(String[] args) throws InterruptedException {Test test = new Test(); // 创建对象// 1.同一个对象的两个线程, 在run()存在互斥锁, 因为一个对象只有一把锁, 一个线程在用, 其他的线程必须等待, 但是可以访问非synchronized方法Thread ta = new Thread(test, "A1");Thread tb = new Thread(test, "A2");ta.start();tb.start();Thread.sleep(500);System.out.println("----------");// 2.不同对象, 访问synchronized方法是不存在互斥的, 因为没个对象有各自的锁Test test1_a = new Test();Test test1_b = new Test();Thread tt1 = new Thread(test1_a, "A");Thread tt2 = new Thread(test1_b, "B");tt1.start();tt2.start();Thread.sleep(500);System.out.println("----------");// 3.类synchronized测试, 类线程锁和对象线程锁 互不影响final InsertData insertData = new InsertData();new Thread() {@Overridepublic void run() {insertData.insert("A");}}.start();new Thread() {@Overridepublic void run() {insertData.insert1("B");}}.start();}}class InsertData {public synchronized void insert(String name) {System.out.println(name+"执行对象线程锁.. BEGIN");try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(name+"执行对象线程锁.. END");}public synchronized static void insert1(String name) {System.out.println(name + "执行类线程锁 .. BEGIN");System.out.println(name + "执行类线程锁 .. END");}
}
结果如下:
A1 synchronized loop 0
A1 synchronized loop 1
A1 synchronized loop 2
A1 synchronized loop 3
A1 synchronized loop 4
A1 synchronized loop 5
A1 synchronized loop 6
A1 synchronized loop 7
A1 synchronized loop 8
A1 synchronized loop 9
A2 synchronized loop 0
A2 synchronized loop 1
A2 synchronized loop 2
A2 synchronized loop 3
A2 synchronized loop 4
A2 synchronized loop 5
A2 synchronized loop 6
A2 synchronized loop 7
A2 synchronized loop 8
A2 synchronized loop 9
----------
A synchronized loop 0
A synchronized loop 1
A synchronized loop 2
A synchronized loop 3
A synchronized loop 4
A synchronized loop 5
A synchronized loop 6
A synchronized loop 7
A synchronized loop 8
B synchronized loop 0
A synchronized loop 9
B synchronized loop 1
B synchronized loop 2
B synchronized loop 3
B synchronized loop 4
B synchronized loop 5
B synchronized loop 6
B synchronized loop 7
B synchronized loop 8
B synchronized loop 9
----------
A执行对象线程锁.. BEGIN
B执行类线程锁 .. BEGIN
B执行类线程锁 .. END
A执行对象线程锁.. END
synchronized(互斥线程,类线程和对象线程),一段代码理解相关推荐
- java runnable main_Java 线程类问题写一个线程类MyThread,该线程实现了Runnable接口,写一个main方法, * 用for循...
共回答了24个问题采纳率:91.7% interrupt(), stop(), suspend() 都不推荐再用,而是应该让 run 方法正常地退出,如果你打算让它循环,就在 run() 方法内用一个 ...
- 通过获取客户端Json数据字符串,反序列化为实体对象的一段代码
#region 保存候选人数据/// <summary>/// 保存候选人数据/// </summary>/// <param name="entity&quo ...
- 认识Delphi的线程类
本文是没有写过delphi的多线程,对delphi6的线程类TThread不熟悉的人而写的,主要从 TThread的源代码入手.(其他版本的delphi,请参照此文自行理解) Delphi为多线程的实 ...
- 多线程、并发/并行、自定义线程类、线程安全、守护线程、定时器、线程状态、线程池
目录 进程和线程: 进程: 线程: 多线程的好处: 线程调度: 分时调度: 抢占式调度: 并发与并行: 线程的生命周期: 实现线程的两种基本方式(还有第三种): 创建Thread线程类: 创建Runn ...
- Delphi中的线程类
Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到,但基本上都是对TThread类的几个成员作一简单介绍,再说明一下Execute的实现和Synchr ...
- 【Android NDK 开发】JNI 线程 ( JNI 线程创建 | 线程执行函数 | 非 JNI 方法获取 JNIEnv 与 Java 对象 | 线程获取 JNIEnv | 全局变量设置 )
文章目录 I . JNI 线程创建 II . 线程执行函数 III . 线程方法获取 Java 对象 IV . 线程方法获取 JNIEnv V . JNI 线程 完整代码示例 I . JNI 线程创建 ...
- Qt多线程编程的主要线程类
1.描述 Qt提供QThread类处理多线程,继承自QObject.不受平台影响,实现跨平台功能. 2.主要的线程类 QAtomicInt:提供Interger与平台无关的Atomic运算,即提供了整 ...
- Delphi线程类的使用(1)
Delphi线程类的使用 猛禽[Mental Studio](个人专栏)(BLOG) http://mental.mentsu.com 去年底我写过一篇文章<Delphi中的线程类.2.3.4. ...
- Delphi中的线程类Thread
原文:http://www.heibai.net/article/info/info.php?infoid=22594 Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数De ...
最新文章
- 系统备份是对计算机硬件进行维户吗,计算机系统维护毕业论文_精品.doc
- Ubuntu 防火墙 ufw
- 升级遗留代码的最佳实践
- 【转】left join 和 left outer join 的区别
- 基坑监测日报模板_深基坑又出事,广西工地 10m深 基坑坍塌,4名钢筋工被埋,3人遇难!...
- Spring MVC URL的映射问题 ;Spring MVC 跳转与iframe包含地址问题
- 《图解算法》学习笔记之快速排序
- CAD2020学习教程
- MPLS 配置静态LSP
- Docker镜像加速
- 写给大佬看的STP算法详细配置实验过程
- k8s多master集群拓扑
- 随机运算HTML5代码,js随机数学加法计算答题代码
- flink设置登录密码
- 观察者模式与推拉模型
- 沟通的艺术:看人入里,看出人外 - part 3
- Python实现excel表合入
- 【YBT2023寒假Day3 C】樱桃莓莓(凸包)(线段树)
- 手机党心声:“离开手机生活”这是不可能的!
- [汉化主题] Knowhow v1.1.16 – 响应式论坛知识库WordPress主题