Java synchronized(2)
来源:互联网 发布:c语言字符串如何结束 编辑:程序博客网 时间:2024/06/15 10:50
Java synchronized 关键字是将锁放在对象上的,因此同一个类不同对象,那么是不受影响的。写两个小程序来测试一下。
先记录下同一个对象的情况:
package com.lenovo.plm.dms.p4;public class Service { private long record; public Service(long record){ this.record = record; } synchronized public void addRecord(){ System.out.println(Thread.currentThread().getName() + ":"+ record++); }}
package com.lenovo.plm.dms.p4;public class MyThread extends Thread{ private Service service; public MyThread(Service service){ this.service = service; } @Override public void run() { // TODO Auto-generated method stub super.run(); for(int i = 0;i<1000;i++){ service.addRecord(); } } }
package com.lenovo.plm.dms.p4;public class Main { public static void main(String[] args) { Service service = new Service(0); MyThread t1 = new MyThread(service); t1.start(); MyThread t2 = new MyThread(service); t2.start(); } }
这里两个线程,对同一个service对象进行调用,因此service中record变量是竞争资源。结果太长,因此截取其中如下:
Thread-0:1319
Thread-0:1320
Thread-0:1321
Thread-0:1322
Thread-0:1323
Thread-0:1324
Thread-0:1325
Thread-0:1326
Thread-0:1327
Thread-0:1328
Thread-1:1329
Thread-1:1330
Thread-1:1331
Thread-1:1332
Thread-1:1333
Thread-1:1334
Thread-1:1335
Thread-1:1336
Thread-1:1337
Thread-1:1338
Thread-1:1339
Thread-1:1340
可以看出两个线程是同步的。
再记录一种情况,就是两个线程操作同一个类的两个对象。
Service 类定义相同。
线程类定义如下:
package com.lenovo.plm.dms.p5;public class MyThread extends Thread { @Override public void run() { // TODO Auto-generated method stub super.run(); Service service = new Service(0); for(int i = 0;i<1000;i++){ service.addRecord(); } } }
执行类定义如下:
package com.lenovo.plm.dms.p5;public class Main { public static void main(String[] args) { MyThread t1 = new MyThread(); t1.start(); MyThread t2 = new MyThread(); t2.start(); } }
两个线程分别操作两个对象。运行结果如下:
Thread-1:995
Thread-1:996
Thread-1:997
Thread-1:998
Thread-1:999
Thread-0:972
Thread-0:973
Thread-0:974
Thread-0:975
Thread-0:976
Thread-0:977
Thread-0:978
Thread-0:979
Thread-0:980
Thread-0:981
Thread-0:982
Thread-0:983
Thread-0:984
Thread-0:985
Thread-0:986
Thread-0:987
Thread-0:988
Thread-0:989
Thread-0:990
Thread-0:991
Thread-0:992
Thread-0:993
Thread-0:994
Thread-0:995
Thread-0:996
Thread-0:997
Thread-0:998
Thread-0:999
可以看出两个线程的计算结果是独立的,互相不影响。
- synchronized java 详解2
- Java多线程2:synchronized
- Java synchronized(2)
- Java并发(2) synchronized关键字
- JAVA 2 synchronized的用法
- Java初学习 - synchronized与static synchronized 的区别(2)
- Java synchronized
- Java synchronized
- java synchronized
- java synchronized
- java synchronized
- java synchronized
- Java synchronized
- java synchronized
- java synchronized
- java synchronized
- java synchronized
- java synchronized
- 类是一个数据类型;对象是类的变量,定义一个类,是一个抽象概念
- Storm命令行客户端
- 自定义绚丽水波纹效果
- 程序员如何优雅度过一生?
- 【转】C#时间格式
- Java synchronized(2)
- LLVM Essentials-Packt 2016(读书笔记):TableGen讲解并不透彻,另外我还想知道后端优化步算法到底怎么编写?
- android 网络编程--socket tcp/ip udp http之间的关系
- Javascript、Jquery获取浏览器和屏幕各种高度宽度
- OC中UIAlertController和UIAlertView用法
- 枚举类型的单例模式(java)
- [leetcode] 304. Range Sum Query 2D - Immutable
- jquery获取单选框复选框下拉框值
- Xcode: No matching provisioning profiles found