`

实验十: 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使用案例

    在`Synchronized`压缩包中,可能包含了通过实验来演示`synchronized`关键字使用的一些Java代码。例如,创建一个共享资源类,然后通过多个线程去操作这个资源,使用`synchronized`关键字来保证线程安全。实验可能涉及...

    Java实验报告配套Java程序设计基础(第3版)实验指导书使用

    - 学习如何创建和管理线程,包括Thread类的使用,实现Runnable接口,以及同步控制(synchronized关键字,wait(), notify()方法)。 11. **实验十一:图形界面设计** - 使用Java Swing或JavaFX库来创建用户界面,...

    java实验及全部相关代码-可供教师教学和学生自学使用

    - Swing组件:使用JFrame、JButton、JLabel等构建用户界面。 - 事件监听:理解事件模型,实现按钮点击等交互功能。 12. **实验16:反射与注解** - 反射:学习在运行时动态获取类的信息和操作对象。 - 注解:...

    《JAVA》实验大纲

    在这一部分,学生将学习如何创建和管理线程,理解同步和互斥的概念,以及如何使用synchronized关键字和wait()、notify()方法。通过设计并发应用程序,如简单的生产者消费者模型,来锻炼并发编程技能。 实验八:GUI...

    JAVA实验指导书

    - 使用synchronized关键字实现线程同步。 - 学习volatile关键字的作用。 - 实践使用Lock接口进行显式锁定。 #### 八、字符流和字符流输入/输出编程 **实验目的:** - 掌握Java语言中字符流的使用方法。 - 学习如何...

    java 课程设计实验报告

    - 数据结构与算法:使用数组、链表、栈、队列等实现数据结构,以及排序和搜索算法的实现。 - 面向对象设计:学习设计模式,如工厂模式、单例模式、观察者模式等。 - 多线程:理解并发编程,创建和管理线程,同步...

    实验五:单例模式.rar

    单例模式是软件设计模式中的一种经典模式,它主要用于控制类的实例化...单例模式的优缺点也值得注意:它可以提高内存使用效率,但可能导致设计过于复杂,不易于测试,也不利于扩展。在使用时,应结合实际情况权衡利弊。

    山东大学软件学院2022Java实验报告

    实验中,学生将学习如何创建和管理线程,理解线程同步和互斥的概念,以及如何使用synchronized关键字确保线程安全。 实验七:网络编程 Java提供了丰富的API用于网络编程,包括TCP和UDP通信。学生将学习如何创建...

    java实验报告

    Java支持多线程,实验可能包含线程的创建(Thread类和Runnable接口)、线程同步(synchronized关键字、wait()、notify()方法)以及线程池的概念。学习者需掌握并发编程的基本原理和技巧。 **实验五:系统I/O程序...

    java实验答案及实验报告书

    6. **多线程**:Java对多线程支持良好,实验可能会让学生编写并发程序,理解synchronized关键字、Thread类和Runnable接口,以及线程通信(wait、notify)。 7. **网络编程**:Java提供了Socket编程接口,实验可能...

    java语言程序设计—软件实验指导书 .doc

    Java支持并发编程,实验会介绍如何创建和管理线程,以及同步机制如synchronized关键字和wait()、notify()方法,以解决线程间的数据共享和竞争条件问题。 实验6:图形用户界面编程 这部分实验将涉及Java Swing或...

    java语言程序设计—软件实验指导书.doc

    实验5涉及到并发编程,学习者将学习如何创建和管理线程,理解同步和互斥的概念,以及如何使用synchronized关键字和wait/notify机制。实验任务可能包括编写一个执行多个任务的多线程程序。 **实验6:图形用户界面...

    Java语言程序设计A实验_java_

    实验会介绍线程的创建、同步和通信,包括Thread类的使用、Runnable接口的实现,以及synchronized关键字和wait/notify机制。 通过这些实验,学生能够全面掌握Java语言的核心概念和技术,具备独立编写和调试Java程序...

    Java语言程序的设计——软件实验指导书.doc

    实验5将介绍Thread类和Runnable接口,以及如何控制线程的同步和通信,如使用synchronized关键字和wait()、notify()方法。 实验6:图形用户界面编程 这部分实验将涉及Java的Swing或JavaFX库,让学生学会创建和操作...

    hebut-Java程序设计实验报告.docx

    实验可能要求创建和管理线程,例如通过实现Runnable接口或继承Thread类创建线程,使用synchronized关键字实现线程同步,避免数据竞争。 实验五:输入输出流 Java的I/O流系统用于处理数据的输入和输出。实验中,可能...

    Java网络编程实验

    同时,实验也将讲解线程同步的概念,如synchronized关键字、wait()和notify()方法,以及Lock接口和ReentrantLock类的应用,这些都是防止数据竞争和确保线程安全的关键。 实验三:Internet寻址 这个实验会探讨Java对...

    吉林大学Java程序设计实验报告

    实验报告将介绍Thread类和Runnable接口,以及synchronized关键字和wait/notify机制,帮助学生理解如何在多核环境下编写高效的并发程序。 **总结** 吉林大学的Java程序设计实验报告是一份全面的学习资源,适合Java...

    java程序设计实验指导

    Java支持并发编程,学生将学习如何创建和管理线程,理解同步和互斥的概念,以及如何使用synchronized关键字和Lock接口来保证线程安全。 实验八:网络编程 最后,实验涵盖了Java的网络编程,包括套接字通信、HTTP...

Global site tag (gtag.js) - Google Analytics