1.不使用synchronized 关键字代码
package Synch;
public class ClassA {
private int i = 0;
private int a, b;
public void reader() {
System.out.println("this is method reader start " + i);
System.out.println("a= " + a);
System.out.println("b= " + b);
if(a!=b){
System.err.println("synchronized failed");
System.exit(0);
}
System.out.println("this is method reader end " + i);
}
public void writer() {
i++;
System.out.println("this is method writer start " + i);
a++;
b++;
System.out.println("this is method writer end " + i);
}
public static void main(String[] args) {
final ClassA A = new ClassA();
Thread ts = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
A.reader();
}
}
});
Thread ts2 = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
A.writer();
}
}
});
ts.start();
ts2.start();
}
}
2. 使用synchronized 代码
package Synch;
public class ClassO {
private int i = 0;
private int a, b;
synchronized public void reader() {
System.out.println("this is method reader start " + i);
System.out.println("a= " + a);
System.out.println("b= " + b);
if(a!=b){
System.err.println("synchronized failed");
System.exit(0);
}
System.out.println("this is method reader end " + i);
}
synchronized public void writer() {
i++;
System.out.println("this is method writer start " + i);
a++;
b++;
System.out.println("this is method writer end " + i);
}
public static void main(String[] args) {
final ClassO O = new ClassO();
Thread ts = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
O.reader();
}
}
});
Thread ts2 = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
O.writer();
}
}
});
ts.start();
ts2.start();
}
}
3.synchronized 关键字是为对象加锁
相关推荐
java synchronized的一些小实验,对帮助理解synchronized的使用有一定的帮助。
1. 建立三个线程,并且同时运行它们。...(3)、在定义Storage类中的setValue(int i) 和getValue ()方法时使用synchronized关键字,将其定义为同步方法 (4)、保存文件,调试并编译运行程序。 参考程序运行效果:
10数据库视频课3
Java就业指导....面试
选择EXCHANGE 存储基础架构应考虑的3大问题
实验3 使用package语句与import语句 13 上机实践4 继承与接口 15 实验1 继承 15 实验2 上转型对象 17 实验3 接口回调 18 上机实践5 字符串、时间与数字 19 实验1 String类的常用方法 19 实验2 比较日期的大小 21 ...
采用synchronized关键字、volatile、ReebtrabtLook类与阻塞列队LinkedBlockingQueue,完成主线程与子线程的同步,要求子线程先执行,在主线程中使用Thread类创建一个子线程,主线程创建后进入阻塞状态,直到子线程...
所有实验都是在8个2080ti GPU(每个具有11GB内存)或2个M40 GPU(每个具有24GB内存)上进行的。 在我们的原始实现中,我们使用C ++实现对光流和立体视差估计进行了成本量计算。 但是C ++实现严格要求PyTorch版本为
本软件的目的是对电磁场进行数字化实验,如仿真、统计、FFT、3D/2D绘图等。它不是软件产品;相反,它使用开源来提供框架和工具,供您试验自己的想法和编码。 为了模拟电磁场,一个简单的插件系统用于动态加载以下...
最近两周闲的无聊,课题也不想做了,就写了一个聊天室程序,放在实验室让大家玩玩,代码如下,分为客户端和服务器端。希望大家多给点意见 服务器端: 1 BroadCast.java package server; import java.io.*; ...
为解决这一问题,提出同步裁剪合成算法(synchronized pruning composition algorithm, SPCA)。新算法对传统合成算法进行了改进,在合成的同时对无效信息进行及时的分析和去除。实验表明,与经典的合成算法相比,...
我们经常遇到这样的场景,线程A和线程B对同一个对象执行操作,但是在A里面new了后,B里面不便取,使的A,B对象是同一个对象,我们就会使用单例模式了。在Android中我们常用于数据库操作,蓝牙命令控制,以及一些工具...
│ 高并发编程第一阶段09讲、多线程与JVM内存结构的关系,虚拟机栈实验.mp4 │ 高并发编程第一阶段10讲、Thread构造函数StackSize详细讲解.mp4 │ 高并发编程第一阶段11讲、Thread构造函数StackSize详细讲解-续....
│ 高并发编程第一阶段09讲、多线程与JVM内存结构的关系,虚拟机栈实验.mp4 │ 高并发编程第一阶段10讲、Thread构造函数StackSize详细讲解.mp4 │ 高并发编程第一阶段11讲、Thread构造函数StackSize详细讲解-续....
核心作用: 保证一个类只有一个实例,并且提供一个访问该实例的全局访问点 就是整个程序有且仅有一个实例。该类负责创建自己的对象,同时确保只有一个对象被创建。在Java,一般常用在工具类的实现或创建对象需要消耗...
// i j k 分别为number 的百位、十位、个位 for (int sum; number; number++){ i=number/100; j=(number-i*100)/10; k=number-i*100-j*10; sum=i*i*i+j*j*j+k*k*k; if (sum==number) System.out.println(number...
快速生物阻抗谱(BIS)测量需要具有有限突出谐波分量的宽带激励信号。 这项工作介绍了一种简单的方法来合成和实现一种周期... 在RC三元等效模型上进行了阻抗测量实验,结果表明可接受的精度,这证明了MFS激励的可行性。