package com.gzhs.zsd.thread;
/***
-
多线程数据共享
-
@author 谢泽鹏
-
@version 1.0
*/
public class Thread_MultiShareData {public static void main(String[] args) {
//同一个对象 final ShareData1 shareData1 = new ShareData1(); ShareData1 data1 = new ShareData1(); //方式1 //多线程里面共享变量, 可以采用实现Runnable接口类, 来实现多线程操作统一对象里面共享变量 //创建两个线程 //线程1 new Thread(shareData1).start(); //线程2 new Thread(shareData1).start(); //方式2 //多线程里面共享变量, 如共享变量存在[加减剩除]不同运算时, 可以采用实现Runnable接口类, 类中包括运算, 来实现多线程里共享变量 //线程1, 实现同一个对象加的运算 new Thread(new Runnable() { @Override public void run() { //加运算 shareData1.increment(); } }).start(); //线程2, 实现同一个对象的减的运算 new Thread(new Runnable() { @Override public void run() { //减运算 shareData1.decrement(); } } ).start(); //方式三 //多线程里面共享变量(单个变量), 可以采用自定义不同的Runnable实现类, 实现同一个对象构造函数传输,可以实现多线程里面共享变量 //线程1 new Thread(new MyRunnable1(data1)).start(); //线程2 new Thread(new MyRunnable2(data1)).start();
}
}
//数据共享类
class ShareData1 implements Runnable{
//多线程共享变量count
private int count = 100;
@Override
public void run() {
while (true) {
count--;
System.out.println(Thread.currentThread().getName() + " of " + count);
}
}
//单个变量
private int j = 0;
//单个变量, 做加运算
public synchronized void increment(){
j++;
System.out.println(Thread.currentThread().getName() + " increment of " + j);
}
//单个变量, 做减运算
public synchronized void decrement(){
j--;
System.out.println(Thread.currentThread().getName() + " decrement of " + j);
}
}
//线程1
class MyRunnable1 implements Runnable{
//对象
private ShareData1 shareData1;
//构造函数
public MyRunnable1(ShareData1 ShareData1){
this.shareData1 = ShareData1;
}
@Override
public void run() {
while (true) {
shareData1.increment();
}
}
}
//线程2
class MyRunnable2 implements Runnable{
//操作对象
private ShareData1 shareData1;
//构造函数
public MyRunnable2(ShareData1 shareData1){
this.shareData1 = shareData1;
}
@Override
public void run() {
while (true) {
shareData1.decrement();
}
}
}