以下是Java中多个线程之间数据共享,两种方式实现的代码
public class MuiltThreadShareData
{
static ShareData data1 = new ShareData();
public static void main(String[] args)
{
/*
* 第一种方式 内部内访问外部内的资源
*/
/*new Thread(new Runnable()
{
@Override
public void run()
{
data1.add();
}
}).start();
new Thread(new Runnable()
{
@Override
public void run()
{
data1.sub();
}
}).start();
new Thread().start();*/
/*
* 第二种方式 直接将共享数据对象传给线程类
*/
ShareData data2 = new ShareData();
Op1 op1 = new Op1(data2);
Thread thread1 = new Thread(op1);
thread1.start();
Op2 op2 = new Op2(data2);
Thread thread2 = new Thread(op2);
thread2.start();
}
}
class ShareData
{
private int count = 0;
public synchronized void add()
{
for(int i = 0; i < 50; i++)
{
count++;
System.out.println(Thread.currentThread().getName()
+ " Addition count:" + count);
}
}
public synchronized void sub()
{
for(int i = 0; i < 50; i++)
{
count--;
System.out.println(Thread.currentThread().getName()
+ " Subtract count:" + count);
}
}
}
class Op1 implements Runnable
{
private ShareData data;
public Op1(ShareData data)
{
this.data = data;
}
@Override
public void run()
{
data.add();
}
}
class Op2 implements Runnable
{
private ShareData data;
public Op2(ShareData data)
{
this.data = data;
}
@Override
public void run()
{
data.sub();
}
}
关于共享数据的面试题:设计4个线程,其中两个线程每次对j增加1,另外两个线程每次对j减少1,。写出程序。
实现代码如下:
public class Realize
{
public static void main(String[] args)
{
final ShareData data = new ShareData();
for(int i = 0; i < 2; i++)
{
new Thread(new Runnable()
{
@Override
public void run()
{
data.add();
}
}).start();
new Thread(new Runnable()
{
@Override
public void run()
{
data.sub();
}
}).start();
}
}
}
class ShareData
{
private int j = 0;
public synchronized void add()
{
for(int i = 0; i < 50; i++)
{
j++;
System.out.println(Thread.currentThread().getName()
+ " j++: j = " + j);
}
}
public synchronized void sub()
{
for(int i = 0; i < 50; i++)
{
j--;
System.out.println(Thread.currentThread().getName()
+ " j--: j = " + j);
}
}
}