设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1
2024-10-14 05:02:50
注:这里inc方法和dec方法加synchronized关键字是因为当两个线程同时操作同一个变量时,就算是简单的j++操作时,在系统底层也是通过多条机器语句来实现,所以在执行j++过程也是要耗费时间,这时就有可能在执行j++的时候,另外一个线程H就会对j进行操作,因此另外一个线程H可能操作的可能就不是最新的值了。因此要提供线程同步。
版本2:
本版本不需要synchronized,而用AtomicInteger代替
package com.yx.zzg; public class ThreadTest1 { private AtomicInteger j=new AtomicInteger();public static void main(String args[]) { ThreadTest1 tt = new ThreadTest1(); Inc inc = tt.new Inc(); Dec dec = tt.new Dec(); for (int i = 0; i < 2; i++) {
Thread t = new Thread(inc);
t.start();
t = new Thread(dec);
t.start();
} } private synchronized void inc() {
j.incrementAndGet();
System.out.println(Thread.currentThread().getName() + "-inc:" + j);
} private synchronized void dec() {
j.decrementAndGet();
System.out.println(Thread.currentThread().getName() + "-dec:" + j);
} class Inc implements Runnable { public void run() {
for (int i = 0; i < 100; i++) {
inc();
}
}
} class Dec implements Runnable { public void run() {
for (int i = 0; i < 100; i++) {
dec();
}
}
} }
最新文章
- 【Java并发编程实战】-----&ldquo;J.U.C&rdquo;:锁,lock
- c#.net 生成清晰缩略图
- 关于在Eclipse中运行java程序报出:The project:XXXX which is referenced by the classpath10
- 用git写书
- QQ微信的备份
- 13 SELECT 以外的内容
- MYSQL数据库错误代码提示汇总
- BootStrap2学习日记3--响应式布局实用类
- 判断iPhone和iPad 判断设备版本
- mysql 数据库查询与实例。
- h.264 fast,1/2,1/4像素运动估计与插值处理
- 命名空间“System.Windows.Forms”中不存在类型或命名空间名称“DataVisualization”。是否缺少程序集引用?
- Java基础——数据类型
- shell快捷键
- C运算符
- ReactiveCocoa基础
- Python 编程快速上手 第七章总结
- 【Python】进程-控制块
- asp.net 中日期的格式化显示的方法
- @Id 和 @column 注解 使用注意