简单实现多线程数据共享
2015-08-25 23:34
337 查看
public class MultiThreadShareData {
/**
* @param args
*/
public static void main(String[] args) {
// ShareData1 shareData = new ShareData1();
// new Thread(shareData).start();
// new Thread(shareData).start();
final ShareData1 shareData = new ShareData1();
//方法1
/*new Thread(new Runnable(){
@Override
public void run() {
shareData.increment();
}
}).start();
new Thread(new Runnable(){
@Override
public void run() {
shareData.decrement();
}
}).start();*/
//方法2
new Thread(new MyShareData1(shareData)).start();
new Thread(new MyShareData2(shareData)).start();
}
static class ShareData1 implements Runnable{
private int count = 100;
@Override
public void run() {
while(true){
count--;
}
}
private int j = 0;
public synchronized void increment(){
j++;
}
public synchronized void decrement(){
j--;
}
}
static class MyShareData1 implements Runnable{
private ShareData1 data;
public MyShareData1(ShareData1 data){
this.data = data;
}
@Override
public void run() {
data.increment();
}
}
static class MyShareData2 implements Runnable{
private ShareData1 data;
public MyShareData2(ShareData1 data){
this.data = data;
}
@Override
public void run() {
data.decrement();
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
// ShareData1 shareData = new ShareData1();
// new Thread(shareData).start();
// new Thread(shareData).start();
final ShareData1 shareData = new ShareData1();
//方法1
/*new Thread(new Runnable(){
@Override
public void run() {
shareData.increment();
}
}).start();
new Thread(new Runnable(){
@Override
public void run() {
shareData.decrement();
}
}).start();*/
//方法2
new Thread(new MyShareData1(shareData)).start();
new Thread(new MyShareData2(shareData)).start();
}
static class ShareData1 implements Runnable{
private int count = 100;
@Override
public void run() {
while(true){
count--;
}
}
private int j = 0;
public synchronized void increment(){
j++;
}
public synchronized void decrement(){
j--;
}
}
static class MyShareData1 implements Runnable{
private ShareData1 data;
public MyShareData1(ShareData1 data){
this.data = data;
}
@Override
public void run() {
data.increment();
}
}
static class MyShareData2 implements Runnable{
private ShareData1 data;
public MyShareData2(ShareData1 data){
this.data = data;
}
@Override
public void run() {
data.decrement();
}
}
}
相关文章推荐
- 设计模式学习笔记十五:命令模式
- 链接属性和存储类型
- Linux系统磁盘管理基本知识
- 不带signed或unsigned关键字的char型 无符号数? 有符号数? C标准规定为 Implementation Defined !!!
- Effective C++——条款1和条款2(第1章)
- lesson2-java虚拟机之jvm结构
- GCD总结
- Tween动画
- CSS学习------之简单图片切换
- 大分享-hibernate,springmvc,easyui简要介绍
- C#解析HTML
- 图像处理形态学椭圆形模板结构元素的设计与实现
- find、sed、awk
- 读写锁
- Linux磁盘分区管理--ext2和ext3文件系统逻辑结构分析
- android toolku
- ThreadLocal维护线程局部 变量或线程局部对象
- 有了jsRender,妈妈再也不用担心我用jq拼接DOM拼接的一团糟了、页面整齐了、其他伙伴读代码也不那么费劲了
- 2015-8-25关于学习方法(控件)
- 算法学习 - 最长公共子序列(LCS)C++实现