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 关键字是为对象加锁
相关推荐
在`Synchronized`压缩包中,可能包含了通过实验来演示`synchronized`关键字使用的一些Java代码。例如,创建一个共享资源类,然后通过多个线程去操作这个资源,使用`synchronized`关键字来保证线程安全。实验可能涉及...
- 学习如何创建和管理线程,包括Thread类的使用,实现Runnable接口,以及同步控制(synchronized关键字,wait(), notify()方法)。 11. **实验十一:图形界面设计** - 使用Java Swing或JavaFX库来创建用户界面,...
- Swing组件:使用JFrame、JButton、JLabel等构建用户界面。 - 事件监听:理解事件模型,实现按钮点击等交互功能。 12. **实验16:反射与注解** - 反射:学习在运行时动态获取类的信息和操作对象。 - 注解:...
在这一部分,学生将学习如何创建和管理线程,理解同步和互斥的概念,以及如何使用synchronized关键字和wait()、notify()方法。通过设计并发应用程序,如简单的生产者消费者模型,来锻炼并发编程技能。 实验八:GUI...
- 使用synchronized关键字实现线程同步。 - 学习volatile关键字的作用。 - 实践使用Lock接口进行显式锁定。 #### 八、字符流和字符流输入/输出编程 **实验目的:** - 掌握Java语言中字符流的使用方法。 - 学习如何...
- 数据结构与算法:使用数组、链表、栈、队列等实现数据结构,以及排序和搜索算法的实现。 - 面向对象设计:学习设计模式,如工厂模式、单例模式、观察者模式等。 - 多线程:理解并发编程,创建和管理线程,同步...
单例模式是软件设计模式中的一种经典模式,它主要用于控制类的实例化...单例模式的优缺点也值得注意:它可以提高内存使用效率,但可能导致设计过于复杂,不易于测试,也不利于扩展。在使用时,应结合实际情况权衡利弊。
实验中,学生将学习如何创建和管理线程,理解线程同步和互斥的概念,以及如何使用synchronized关键字确保线程安全。 实验七:网络编程 Java提供了丰富的API用于网络编程,包括TCP和UDP通信。学生将学习如何创建...
Java支持多线程,实验可能包含线程的创建(Thread类和Runnable接口)、线程同步(synchronized关键字、wait()、notify()方法)以及线程池的概念。学习者需掌握并发编程的基本原理和技巧。 **实验五:系统I/O程序...
6. **多线程**:Java对多线程支持良好,实验可能会让学生编写并发程序,理解synchronized关键字、Thread类和Runnable接口,以及线程通信(wait、notify)。 7. **网络编程**:Java提供了Socket编程接口,实验可能...
Java支持并发编程,实验会介绍如何创建和管理线程,以及同步机制如synchronized关键字和wait()、notify()方法,以解决线程间的数据共享和竞争条件问题。 实验6:图形用户界面编程 这部分实验将涉及Java Swing或...
实验5涉及到并发编程,学习者将学习如何创建和管理线程,理解同步和互斥的概念,以及如何使用synchronized关键字和wait/notify机制。实验任务可能包括编写一个执行多个任务的多线程程序。 **实验6:图形用户界面...
实验会介绍线程的创建、同步和通信,包括Thread类的使用、Runnable接口的实现,以及synchronized关键字和wait/notify机制。 通过这些实验,学生能够全面掌握Java语言的核心概念和技术,具备独立编写和调试Java程序...
实验5将介绍Thread类和Runnable接口,以及如何控制线程的同步和通信,如使用synchronized关键字和wait()、notify()方法。 实验6:图形用户界面编程 这部分实验将涉及Java的Swing或JavaFX库,让学生学会创建和操作...
实验可能要求创建和管理线程,例如通过实现Runnable接口或继承Thread类创建线程,使用synchronized关键字实现线程同步,避免数据竞争。 实验五:输入输出流 Java的I/O流系统用于处理数据的输入和输出。实验中,可能...
同时,实验也将讲解线程同步的概念,如synchronized关键字、wait()和notify()方法,以及Lock接口和ReentrantLock类的应用,这些都是防止数据竞争和确保线程安全的关键。 实验三:Internet寻址 这个实验会探讨Java对...
实验报告将介绍Thread类和Runnable接口,以及synchronized关键字和wait/notify机制,帮助学生理解如何在多核环境下编写高效的并发程序。 **总结** 吉林大学的Java程序设计实验报告是一份全面的学习资源,适合Java...
Java支持并发编程,学生将学习如何创建和管理线程,理解同步和互斥的概念,以及如何使用synchronized关键字和Lock接口来保证线程安全。 实验八:网络编程 最后,实验涵盖了Java的网络编程,包括套接字通信、HTTP...