`

实验十: synchronized 使用

 
阅读更多

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使用案例

    java synchronized的一些小实验,对帮助理解synchronized的使用有一定的帮助。

    JAVA多线程运用

    1. 建立三个线程,并且同时运行它们。...(3)、在定义Storage类中的setValue(int i) 和getValue ()方法时使用synchronized关键字,将其定义为同步方法 (4)、保存文件,调试并编译运行程序。 参考程序运行效果:

    10数据库视频课3

    10数据库视频课3

    就业Java冲刺提升.7z

    Java就业指导....面试

    选择EXCHANGE 存储基础架构应考虑的3大问题

    选择EXCHANGE 存储基础架构应考虑的3大问题

    Java 2实用教程(第三版)实验指导与习题解答

    实验3 使用package语句与import语句 13 上机实践4 继承与接口 15 实验1 继承 15 实验2 上转型对象 17 实验3 接口回调 18 上机实践5 字符串、时间与数字 19 实验1 String类的常用方法 19 实验2 比较日期的大小 21 ...

    操作系统的线程同步实验报告完整版

    采用synchronized关键字、volatile、ReebtrabtLook类与阻塞列队LinkedBlockingQueue,完成主线程与子线程的同步,要求子线程先执行,在主线程中使用Thread类创建一个子线程,主线程创建后进入阻塞状态,直到子线程...

    SENSE:感觉

    所有实验都是在8个2080ti GPU(每个具有11GB内存)或2个M40 GPU(每个具有24GB内存)上进行的。 在我们的原始实现中,我们使用C ++实现对光流和立体视差估计进行了成本量计算。 但是C ++实现严格要求PyTorch版本为

    时空同步FDTD算法_C++_代码_下载

    本软件的目的是对电磁场进行数字化实验,如仿真、统计、FFT、3D/2D绘图等。它不是软件产品;相反,它使用开源来提供框架和工具,供您试验自己的想法和编码。 为了模拟电磁场,一个简单的插件系统用于动态加载以下...

    java聊天室源程序

    最近两周闲的无聊,课题也不想做了,就写了一个聊天室程序,放在实验室让大家玩玩,代码如下,分为客户端和服务器端。希望大家多给点意见 服务器端: 1 BroadCast.java package server; import java.io.*; ...

    论文研究-低空间复杂度的加权有限状态转换器合成算法.pdf

    为解决这一问题,提出同步裁剪合成算法(synchronized pruning composition algorithm, SPCA)。新算法对传统合成算法进行了改进,在合成的同时对无效信息进行及时的分析和去除。实验表明,与经典的合成算法相比,...

    设计模式(一)——单例模式

    我们经常遇到这样的场景,线程A和线程B对同一个对象执行操作,但是在A里面new了后,B里面不便取,使的A,B对象是同一个对象,我们就会使用单例模式了。在Android中我们常用于数据库操作,蓝牙命令控制,以及一些工具...

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第一阶段09讲、多线程与JVM内存结构的关系,虚拟机栈实验.mp4 │ 高并发编程第一阶段10讲、Thread构造函数StackSize详细讲解.mp4 │ 高并发编程第一阶段11讲、Thread构造函数StackSize详细讲解-续....

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第一阶段09讲、多线程与JVM内存结构的关系,虚拟机栈实验.mp4 │ 高并发编程第一阶段10讲、Thread构造函数StackSize详细讲解.mp4 │ 高并发编程第一阶段11讲、Thread构造函数StackSize详细讲解-续....

    GOF23之单例模式

    核心作用: 保证一个类只有一个实例,并且提供一个访问该实例的全局访问点 就是整个程序有且仅有一个实例。该类负责创建自己的对象,同时确保只有一个对象被创建。在Java,一般常用在工具类的实现或创建对象需要消耗...

    达内 coreJava 习题答案

    // 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激励的可行性。

Global site tag (gtag.js) - Google Analytics