前记
上一篇温习的是ThreadLocal共享复杂数据的情况,这次是来温习多个线程访问共享对象和数据的方式。对应网上设计四个线程,其中两个线程对数据每次进行加1操作,另外两个线程对于数据每次进行减1的操作。
场景及代码
对应网上设计四个线程,其中两个线程对数据每次进行加1操作,另外两个线程对于数据每次进行减1的操作。
/**
*
*/
package com.test.thread;
/*********************************************************************************
//* Copyright (C) 2016 kunchi . All Rights Reserved.
//*
//* Filename: MultiThreadShareData.java
//* Revision: 1.0
//* Author: <gao yunqi>
//* Created On: 2016年7月24日
//* Modified by:
//* Modified On:
//*
//* Description: <多线程共享数据之四个线程,其中个两个线程每次进行加1操作
* 另外两个线程每次进行减1的操作>
*/
/********************************************************************************/
public class MultiThreadShareData {
//共享变量方式二private static ShareData data1;
/**
* @param args
*/
public static void main(String[] args) {
//方式1:
//内部类共享数据的方式,定义一个final的局部变量,另外一种方式是定义一个静态的成员变量
final ShareData data1 = new ShareData();
new Thread(new Runnable() {
@Override
public void run() {
data1.increment();
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
data1.decrement();
}
}).start();
}
//方式2
ShareData data2 = new ShareData();
}
class MyRunnable1 implements Runnable{
private ShareData data;
public MyRunnable1(ShareData data) {
this.data = data;
}
@Override
public void run() {
data.decrement();
}
}
class MyRunnable2 implements Runnable{
private ShareData data;
public MyRunnable2(ShareData data) {
this.data = data;
}
@Override
public void run() {
data.increment();
}
}
class ShareData {
private int data = 0;
public synchronized void increment(){
data++;
}
public synchronized void decrement(){
data--;
}
}
以上就是多个线程访问共享对象和数据的方式的温习和介绍。