WEB开发网
开发学院手机开发Android 开发 Android应用开发之Java基础篇——数据同步 阅读

Android应用开发之Java基础篇——数据同步

 2010-10-14 06:17:00 来源:本站整理   
核心提示:本文简单介绍Java的数据同步机制(本文面向从C/C++转向Android应用开发的开发人员),什么情况需要数据同步?首先我们看一个例子,Android应用开发之Java基础篇——数据同步,通过例子我们引入数据同步问题:public class TestCompete{private long i;public voi

本文简单介绍Java的数据同步机制(本文面向从C/C++转向Android应用开发的开发人员)。

什么情况需要数据同步?

首先我们看一个例子,通过例子我们引入数据同步问题:

public class TestCompete

{

private long i;

public void next() {

i++;

i++;

}

public long getValue() { return i; }

public static void main(String[] argv)

{

final TestCompete tc = new TestCompete();

new Thread() {

public void run()

{

while(true)

{

long val = tc.getValue();

System.out.println(val);

if(val % 2 != 0)

{

System.exit(0);

}

}

}

}.start();

while(true)

tc.next();

}

}

通过上例我们可以看到,外部类TestCompete提供获得数据的方法getValue和修改数据的方法next,在主线程中循环修改 TestCompete对象tc的值,而在工作线程中,循环读取tc的值(请注意匿名Thread类可以访问外部类的数据,请参考《Android应用开发之Java基础篇——内部类》)。这样这两个线程就出现竞争关系,有可能主线程的next方法执行了一半,而调度程序调度了工作线程getValue方法,这样工作线程将会得到奇数,程序结束。

这个程序在我的Ubuntu虚拟机中,运行不到10s就会结束,但是在Unix Center的服务器上,运行几个小时都不会出错,看来Unix Center的服务器多线程处理能力比我的本机强很多啊。

通过这个例子我们可以看到多个线程同时读写(注意是读和写,假如所有线程都读,那么将不会出现不一致问题)同一数据时,将有可能出现数据不一致问题。我觉得有以下情况需要注意数据同步的问题:

1、匿名Thread内部类访问外部类数据,如上例所示。

2、多个线程访问同一个类的静态数据。

3、多个线程同时读写同一个文件,Socket,或者管道等IO对象。

Java的解决数据同步的方法

熟悉多线程编程的朋友都知道,为了防止数据不一致,通过数据加锁/解锁操作来保护,在Linux中多线程编程是Mutex来进行数据保护。Java也是通过提供这种机制来解决数据同步问题的。

1 2 3  下一页

Tags:Android 应用开发 Java

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接