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

时间:2022-03-06 02:24:44
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();
}
} }

用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1的更多相关文章

  1. Java 多线程基础(四)线程安全

    Java 多线程基础(四)线程安全 在多线程环境下,如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线 ...

  2. 多线程程序 怎样查看每个线程的cpu占用

    可以用下面的命令将 cpu 占用率高的线程找出来: ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu 这个命令首先指定参数'H',显示线程相关的 ...

  3. Java并发编程原理与实战四:线程如何中断

    如果你使用过杀毒软件,可能会发现全盘杀毒太耗时间了,这时你如果点击取消杀毒按钮,那么此时你正在中断一个运行的线程. java为我们提供了一种调用interrupt()方法来请求终止线程的方法,下面我们 ...

  4. JAVA基础知识&vert;Executors提供的四种线程池

    一.Thread与Executors 开启新的线程,我们经常会采用如下方法: Thread thread =new Thread(new Runnable() { @Override public v ...

  5. DHTMLX 前端框架 建立你的一个应用程序教程&lpar;四&rpar;--添加一个工具条toolbar

    工具条例子 样本如下: 这里我们使用的是dhtmlxToolbar 组件. 添加工具栏到布局中: 1.使用attachToolbar() 方法初始化页面 添加代码到index.html中 dhtmlx ...

  6. Linux多线程实践(四 )线程的特定数据

    在单线程程序中.我们常常要用到"全局变量"以实现多个函数间共享数据, 然而在多线程环境下.因为数据空间是共享的.因此全局变量也为全部线程所共同拥有.但有时应用程序设计中有必要提供线 ...

  7. java 22 - 5 多线程之获取和设置线程对象的名称

    如何获取线程对象的名称呢? public final String getName():获取线程的名称.如何设置线程对象的名称呢? public final void setName(String n ...

  8. java 22 - 6 多线程之线程调度和设置线程的优先级

    线程调度 假如我们的计算机只有一个 CPU,那么 CPU 在某一个时刻只能执行一条指令,线程只有得到 CPU时间片,也就是使用权,才可以执行指令. 那么Java是如何对线程进行调用的呢? 线程有两种调 ...

  9. 多线程入门-第四章-线程的调度与控制之sleep

    /* sleep,阻塞当前线程,腾出CPU,让给其他线程 单位是毫秒 静态方法 */ public class ThreadTest04 { public static void main(Strin ...

随机推荐

  1. CRL快速开发框架系列教程一&lpar;Code First数据表不需再关心&rpar;

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  2. oracle的特殊权限s bit丢失

    在SUN Cluster搭建过程中,主机工程师在配置集群资源组时报一个oracle的文件权限错误: 协助排查,发现报错很明确,直接指出说oracle的s bit 权限未设置. 直接去查看$ORACLE ...

  3. Android 应用程序的组成部分

    Android应用程序由松散耦合的组件组成,并使用应用程序Manifest绑定到一起,应用程序Manifest描述了每一个组件和它们之间的交互方式,还用于制定应用程序元数据.其硬件和平台要求.外部库以 ...

  4. &lbrack;React Testing&rsqb; className with Shallow Rendering

    The React Shallow Renderer test utility lets us inspect the output of a component one level deep. In ...

  5. Unix&sol;Linux环境C编程入门教程&lpar;39&rpar; shell命令之系统管理

    df命令 用于检测文件系统的磁盘空间占用和空余情况,可以显示所有文件系统对节点和磁盘块的使用情况.命令的使用格式如下: df  [选项] 常用参数及含义如下表所示. df -a:显示所有文件系统的磁盘 ...

  6. Python——模块——随机模块

    1.引用模块 import random 2.随机整数 random.randint(a,b) 3.随机浮点数 random.uniform(a,b) 4.从列表中随机取元素 random.choic ...

  7. 一些有用的Java学习资料

    Better Java,一些好的Java实践 Google Java Style Guide 30个Java编程技巧 JDK8新增语法特性简介,对Java8中新增的函数接口.Lambda表达式.方法引 ...

  8. Failed to acquire lock on file &period;lock in &sol;tmp&sol;kafka-logs&period; A Kafka instance in another process or thread is using this directory&period;

    1. 问题现象 启动 kafka 时报错:Failed to acquire lock on file .lock in /tmp/kafka-logs. A Kafka instance in an ...

  9. 【学习】Hall’s Marriage Theorem

    其实是在做题时遇到这个定理的. 这个定理的图论意义是: 对于一个二分图\(G=\{X+Y,E\}\),它满足: \(\forall W \subseteq X, \, |W| \leq |N_G(W) ...

  10. How to use&comma; monitor&comma; and disable transparent hugepages in Red Hat Enterprise Linux 6

    Resolution Note: Transparent Huge Pages are not available on the 32-bit version of RHEL 6. Transpare ...