4样品线程,2在相同的数字加法器线程进一步2上相同的共享数字减影线程

package com.threeti.mecool.web;

//详细地址:减法的方法

public class AddJian {

public int i=0;

public synchronized void add(String threadName) {

i++;

System.out.println(threadName+"加法运算:"+i);

}

public synchronized void jian(String threadName) {

i--;

System.out.println(threadName+"减法运算:"+i);

}

}

package com.threeti.mecool.web;

//共享数据加10次线程

public class AddThread implements Runnable{

private AddJian addJian;

private String threadName;

public AddThread(AddJian addJian,String threadName){

this.addJian=addJian;

this.threadName=threadName;

}

@Override

public void run() {

// TODO Auto-generated method stub

for (int i = 0; i < 10; i++) {

addJian.add(threadName);

}

}

}

package com.threeti.mecool.web;

//共享数据减10次线程

public class JianThread implements Runnable{

private AddJian addJian;

private String threadName;

public JianThread(AddJian addJian,String threadName){

this.addJian=addJian;

this.threadName=threadName;

}

@Override

public void run() {

// TODO Auto-generated method stub

for (int i = 0; i < 10; i++) {

addJian.jian(threadName);

}

}

}

package com.threeti.mecool.web;

public class Test {

/**

* @param args

*/

public static void main(String[] args) {

//同一个数字对象

AddJian addJian=new AddJian();

//2个线程对同一个数字加法运算

Thread thread1=new Thread(new AddThread(addJian,"thread-01"));

Thread thread2=new Thread(new AddThread(addJian,"thread-02"));

thread1.start();

thread2.start();

//2个线程对同一个数字减法运算

Thread thread3=new Thread(new JianThread(addJian,"thread-03"));

Thread thread4=new Thread(new JianThread(addJian,"thread-04"));

thread3.start();

thread4.start();

}

}

版权声明:本文博主原创文章,博客,未经同意不得转载。

时间: 2024-10-04 19:39:29

4样品线程,2在相同的数字加法器线程进一步2上相同的共享数字减影线程的相关文章

第二十二节(String,StringBuffer,基础类型对应的 8 个包装类,日期相关类、 Random 数字 ,Enum枚举)上

/* 获取当前的毫秒数 1S = 1000毫秒 */ public class DateTest01{ public static void main(String[] args){ long now = System.currentTimeMillis(); System.out.println(now); // 1418662206661 } } /////////////////////////////////////////////////////////////////////////

Qt 的线程与事件循环——可打印threadid进行观察槽函数到底是在哪个线程里执行,学习moveToThread的使用)

周末天冷,索性把电脑抱到床上上网,这几天看了 dbzhang800 博客关于 Qt 事件循环的几篇 Blog,发现自己对 Qt 的事件循环有不少误解.从来只看到现象,这次借 dbzhang800 的博客,就代码论事,因此了解到一些 Qt 深层的实现,虽然是在 Qt 庞大的构架里只算的是冰山的一角,确让人颇为收益. 从 dbzhang800 的博客中转载两篇关于事件循环的文章,放在一起,写作备忘. 再次提到的一点是:事件循环和线程没有必然关系. QThread 的 run() 方法始终是在一个单独

子线程循环 10 次,接着主线程循环 100,接着又回到子线程循环 10 次, 接着再回到主线程又循环 100,如此循环 50 次

子线程循环 10 次,接着主线程循环 100,接着又回到子线程循环 10 次, 接着再回到主线程又循环 100,如此循环 50 次 1 package TestThread; 2 3 /** 4 * 子线程循环 10 次, 接着主线程循环 100, 接着又回到子线程循环 10 次, 接着再回到主线程又循环 100, 如此循环 50 次 5 * 6 * @author trfizeng 7 * 8 */ 9 public class ThreadTest { 10 static int round

ThreadLocal实现:java线程范围内的共享数据,线程外独立

场景应用:银行转账时,A给B转账,C给D转账.两者都是调用的connection.begainTransaction();connection.commit(); 如何才能保证A,B同在一个线程中,C.D同在一个线程中,且A,BC,D在线程内共享,在线程外独立. 方法一,Map<Thread, Integer>实现: /** * 线程范围内的共享数据 */ package cn.itcast.lesson5; import java.util.HashMap; import java.util

为什么Goroutine能有上百万个,Java线程却只能有上千个?

作者|Russell Cohen 译者|张卫滨 本文通过 Java 和 Golang 在底层原理上的差异,分析了 Java 为什么只能创建数千个线程,而 Golang 可以有数百万的 Goroutines,并在上下文切换.栈大小方面对两者的实现原理进行了剖析. 很多有经验的工程师在使用基于 JVM 的语言时,都会看到这样的错误: [error] (run-main-0) java.lang.OutOfMemoryError: unable to create native thread: [er

【转】java线上程序排错经验2 - 线程堆栈分析

前言 在线上的程序中,我们可能经常会碰到程序卡死或者执行很慢的情况,这时候我们希望知道是代码哪里的问题,我们或许迫切希望得到代码运行到哪里了,是哪一步很慢,是否是进入了死循环,或者是否哪一段代码有问题导致程序很慢,或者出现了线程不安全的情况,或者是某些连接数或者打开文件数太多等问题,总之我们想知道程序卡在哪里了,哪块占用了大量的资源. 此时,或许通过线程堆栈的分析就能定位出问题. 如果能深入掌握堆栈分析的技术,很多问题都能迎刃而解,但是线程堆栈分析并不简单,设计到线上的排错问题,需要有一定的知识

接上 主线程和分线程的另一种方法GCD

// //  ViewController.m //  GCD // //  Created by mac on 15-9-28. //  Copyright (c) 2015年 zy. All rights reserved. // #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDi

在 Java 的多线程中,如何去判断给定的一个类是否是线程安全的(另外:synchronized 同步是否就一定能保证该类是线程安全的。)

同步代码块和同步方法的区别:同步代码块可以传入任意对象,同步方法中 如果多个线程检查的都是一个新的对象,不同的同步锁对不同的线程不具有排他性,不能实现线程同步的效果,这时候线程同步就失效了. 两者的区别主要体现在同步锁上面.对于实例的同步方法,因为只能使用this来作为同步锁,如果一个类中需要使用到多个锁,为了避免锁的冲突,必然需要使用不同的对象,这时候同步方法不能满足需求,只能使用同步代码块(同步代码块可以传入任意对象): 有几个原则的:程序次序规则:一个线程内,代码的执行会按照程序书写的顺序

在实现文本框只能输入数字和小数点的基础上实现了价格样式(保留两位小数)

我在测试充值接口的时候,输入金额保留到小数点后三位的时候程序就报错,后来就想到充值金额最多只能保留到小数点后两位,下面就是我用JQuery实现的详细代码,仅供参考,大神勿喷 1 $(function() { 2 //阻止数字键以外的按键输入 3 $("#zf_money").keydown(function(e) { 4 digitInput($(this),e); 5 }); 6 $("#zf_money").keyup(function() { 7 if($(t