public class MultiThreadShareData {
/**
* 多线程成共享数据 面试题 第一种买票系统 方法
* 方式:如果每个线程执行相同的代码可以使用同一个Runable对象这个Runable对象中有那个共享的数据
*/
public static void main(String[] args) {
ShareData data = new ShareData()
new Thread(data)start()
new Thread(data)start()
}
}
class ShareData implements Runnable{
private int count =;
@Override
public void run() {
while(true){
count ;
}
}
}
××××××××××××××××××××××××××××××××××××××××××××
public class MultiThreadShareData {
/**
* 多线程成共享数据(共享数据是指同一个对象)
* 面试题
* 第二种方式如果比如多个个线程执行代码不同比如以下示例一会加一会减测需要个Runable 对象来操作
设计个线程其中个线程每次对j增加另外两个线程对J 每次减少写出程序
*/
public static void main(String[] args) {
//共同对象
final ShareData data = new ShareData()
/* 加 j */
new Thread(new Runnable(){//内部类
@Override
public void run() {
datasub()
}
})start()
/* 减 j */
new Thread(new Runnable(){
@Override
public void run() {
dataadd()
}
})start()
}
}
class ShareData {
private int j=;
public synchronized void add(){
j++;
}
public synchronized void sub(){
j;
}
}
demo: 网上搜索的答案
/**
* 第二种方式如果比如多个个线程执行代码不同比如以下示例一会加一会减测需要 个Runable 对象来操作
设计个线程其中个线程每次对j增加另外两个线程对J 每次减少写出程序
* @author Administrator
* 这里个Runnable都是内部类可以访问外部类的成员变量 这里是 j 通过内部类调用外部类方法 J++ J
*/
public class ThreadTest {
private int j;
public static void main(String args[]) {
ThreadTest tt = new ThreadTest()
//必须通过外部类的对象才能实例化内部类
Inc inc = ttnew Inc()
Dec dec = ttnew Dec()
for (int i = ; i < ; i++) {
Thread t = new Thread(inc)
tstart()
t = new Thread(dec)
tstart()
}
}
private synchronized void inc() {
j++;
Systemoutprintln(ThreadcurrentThread()getName() + inc: + j)
}
private synchronized void dec() {
j;
Systemoutprintln(ThreadcurrentThread()getName() + dec: + j)
}
//内部类 增
class Inc implements Runnable {
// 可以操作外部类的变量 j
public void run() {
for (int i = ; i < ; i++) {
inc()
}
}
}
//内部类 减
class Dec implements Runnable {
// 可以操作外部类的变量 j
public void run() {
for (int i = ; i < ; i++) {
dec()
}
}
}
}