设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1.
似乎自己写的程序没有进行同步,所以j的计数会有问题。
回家之后再重新写了这个程序。
用了synchronized同步。 另外一种方法采用lock进行同步。
一下是程序。
使用同步方法进行
package com.duduli.li;
public class Test2 {
static int j=100;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Test2 t = new Test2();
Inc t1 = t.new Inc();
Inc t2 = t.new Inc();
Dec t3 = t.new Dec();
Dec t4 = t.new Dec();
new Thread(t1).start();
new Thread(t2).start();
new Thread(t3).start();
new Thread(t4).start();
// System.out.println(j);
}
// 需要对方法进行同步。否则会出现问题。
private synchronized void add() {
j++;
System.out.println("+ " + j);
}
private synchronized void minus() {
j--;
System.out.println("- " + j);
}
class Inc implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
add();
}
}
class Dec implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
minus();
}
}
}
另外采用lock的方法是:
package com.duduli.li;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class Test3 extends Thread{
int flag;
public Test3(int flag){
this.flag = flag;
}
public static Lock lock = new ReentrantReadWriteLock().writeLock();
static int j = 100;
@Override
public void run() {
// TODO Auto-generated method stub
if(flag==1){
lock.lock();
j++;
System.out.println("+ "+j);
lock.unlock();
}
if(flag==0){
lock.lock();
j--;
System.out.println("- "+j);
lock.unlock();
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new Test3(0).start();
new Test3(0).start();
new Test3(1).start();
new Test3(1).start();
}
}
分享到:
相关推荐
Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式...
Java多线程读大文件 java多线程写文件:多线程往队列中写入数据
Java多线程运行机制、并发处理面试题目深层解读。
java多线程PPT 多线程基本概念 创建线程的方式 线程的挂起与唤醒 多线程问题
一个java 多线程操作数据库应用程序!!!
java 多线程的一个例子java 多线程的一个例子java 多线程的一个例子java 多线程的一个例子
详细的讲解了java多线程的原理,并配有代码进行实战,适合java初学者和想对多线程有进一步了解的人。
java多线程实现一个控制台聊天室 java多线程实现一个控制台聊天室
java多线程并发查询数据库,使用线程池控制分页,并发查询。
多线程启动.java多线程启动.java多线程启动.java多线程启动.java
java多线程经典案例,线程同步、线程通信、线程阻塞等经典案例
java多线程处理数据库数据,使用并发包,无框架,可批量处数据库数据,进行增删改。。等等操作。
该文档总结了Java多线程相关的知识点,分享给大家,简单易懂!
很简单的一个java多线程例子,希望多大家有帮助
java多线程面试经典,内含50道常被面试官问到的java多线程题。
基于java多线程的一款小游戏基于java多线程的一款小游戏基于java多线程的一款小游戏 基于java多线程的一款小游戏基于java多线程的一款小游戏基于java多线程的一款小游戏 基于java多线程的一款小游戏基于java多线程的...
本篇文章提供了20道高难度的Java多线程编程面试题及详细解析,旨在帮助开发者展示出卓越的并发编程能力。在当今高并发的应用场景下,对多线程编程的理解和应用是评估面试者的重要指标。通过这些高难度问题,您将全面...
线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运行很多线程。线程总是属于某个进程,进程中的多个线程共享进程的内存。 “同时”执行是人的感觉,在线程之间实际上轮换执行。...
java 多线程 其实就是每个线程都拥有自己的内存空间,多线程之间的通信,比例A线程修改了主内存(main方法的线程)变量,需要把A线程修改的结果同步到主线程中,这时B线程再从主线程获取该变量的值,这样就实现了...
资深Java专家10年经验总结,全程案例式讲解,首本全面介绍Java多线程编程技术的专著 结合大量实例,全面讲解Java多线程编程中的并发访问、线程间通信、锁等最难突破的核心技术与应用实践 Java多线程无处不在,如...