首页 > 编程语言 > 详细

多个线程访问共享对象和数据

时间:2015-07-13 06:42:02      阅读:179      评论:0      收藏:0      [点我收藏+]

多个线程访问共享对象和数据有很多方式,但是可以分为两大类:1.多线程执行代码相同的。2.多线程执行代码不同的

对于多线程执行代码相同的情况来说:

1)使用同一个Runnable对象,在new Thread的时候放入相同的这个对象

public static void main(String[] args) {

		Runnable r = new Runnable() {
			int num = 100;
			@Override
			public synchronized void run() {
				System.out.println(++num + "==add");
			}
		};
		Thread t1 = new Thread(r);
		Thread t2 = new Thread(r);
		Thread t3 = new Thread(r);
		t1.start();
		t2.start();
		t3.start();
	}

对于多线程代码不同的情况来说:

1)将需要共享的对象或者数据放入另一个对象中,这个对象对外提供对其操作的方法,由不同的线程调用。

class Number {
	int num = 100;
	public int add() {
		return ++num;
	}	
	public int del() {
		return --num;
	}
}

Runnable对象中使用同一个Number对象

public static void main(String[] args) {

		final Number num = new Number();
		Runnable rAdd = new Runnable() {
			@Override
			public synchronized void run() {
				System.out.println(num.add() + "==add");
			}
		};
		Runnable rDel = new Runnable() {
			@Override
			public synchronized void run() {
				System.out.println(num.del() + "==del");
			}
		};
		Thread t1 = new Thread(rAdd);
		Thread t2 = new Thread(rDel);
		Thread t3 = new Thread(rAdd);
		t1.start();
		t2.start();
		t3.start();
	}

2)将Runnable写成内部类的形式,然后将需要共享的对象和数据写成外部类的成员变量。

class Number{
	int num = 100;
	Runnable r_add = new Runnable() {
		@Override
		public synchronized void run() {
			System.out.println(++num+"==add");
		}
	};
	Runnable r_del = new Runnable() {
		@Override
		public synchronized void  run() {
			System.out.println(--num+"==del");
		}
	};
}

然后通过调用Number对象中的内部类对象来实现。

public static void main(String[] args) {
		Number n = new Number();
		Thread t1 = new Thread(n.r_add);
		Thread t2 = new Thread(n.r_del);
		t1.start();
		t2.start();
}

------------------------------------------------------------------------------

还有一种方法简单粗暴,就是把需要共享的对象和数据用static修饰。

多个线程访问共享对象和数据

原文:http://my.oschina.net/lunqi/blog/477625

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!