用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1...

本文通过一个Java实例展示了如何使用多线程对共享变量进行安全的加1和减1操作。通过synchronized关键字确保线程同步,并采用面向对象的方法实现线程间的资源共享。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.ljn.base;

/**
 * @author lijinnan
 * @date:2013-9-12 上午9:55:32  
 */

public class IncDecThread2 {

    /**
     * 测试次数
     */
    public static final int TEST_COUNT = 20;
    
    /*
     * 题目:用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1
     * 两个问题:
     * 1、线程同步--synchronized
     * 2、线程之间如何共享同一个j变量--将j以及对j的操作封装在Data类中,然后作为共享对象传递给IncRunnable和DecRunnable
     * 
     * 相对上面第一种解法(利用内部类),本解法更符合面向对象的思想
     */
    public static void main(String[] args) {
        Data data = new Data();
        
        //加1线程,2个
        new Thread(new IncRunnable(data)).start();
        new Thread(new IncRunnable(data)).start();
        
        //减1线程,2个
        new Thread(new DecRunnable(data)).start();
        new Thread(new DecRunnable(data)).start();
    }

}

class Data {
    
    private int j = 10;
    
    public synchronized void inc () {
        j++;
        System.out.println(Thread.currentThread().getName()+"-inc:"+j);
    }
    
    public synchronized void dec () {
        j--;
        System.out.println(Thread.currentThread().getName()+"-dec:"+j);
    }
    
}


class IncRunnable implements Runnable {
    
    private Data data;
    
    public IncRunnable (Data data) {
        this.data = data;
    }
    
    @Override
    public void run() {
        for (int i = 0; i < IncDecThread2.TEST_COUNT; i++) {
            data.inc();
        }
    }
    
}


class DecRunnable implements Runnable {
    
    private Data data;
    
    public DecRunnable (Data data) {
        this.data = data;
    }
    
    @Override
    public void run() {
        for (int i = 0; i < IncDecThread2.TEST_COUNT; i++) {
            data.dec();
        }
    }
    
}

 

转载于:https://www.cnblogs.com/564085446java/p/3613054.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值