当共享数据被不同的线程存取,会出现数据不一致的情况。针对这种情况,Java有一个同步机制来解决这一个问题——锁机制(synchronized关键字的使用),示例代码如下:
public class ShareData {
static int data = 0;
// 定义了一个锁对象lock
static final Object lock = new Object();
public static void main(String[] args) {
// TODO Auto-generated method stub
ShareThread1 st1 = new ShareThread1();
ShareThread2 st2 = new ShareThread2();
new Thread(st1).start();
new Thread(st2).start();
}
private static class ShareThread1 implements Runnable {
public void run() {
synchronized (lock) {
while (data < 10) {
try {
Thread.sleep(1000);
System.out.println("这个小于10的数据是:" + data++);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
private static class ShareThread2 implements Runnable {
public void run() {
synchronized (lock) {
while (data < 100) {
data++;
}
System.out.println("ShareThread2执行完之后data的值为:"+data);
}
}
}
}
通俗理解就是当共享数据在某个线程中被锁住之后,其他线程暂时不能操作共享数据,知道该线程执行完共享数据