JAVA的synchronized关键字为线程加锁,目的是保证数据执行的一致性。
防止多个线程同时操作一个对象或者数据,造成数据混乱。
synchronized对象锁示例
public class RunTest implements Runnable {
static RunTest rt = new RunTest();
static int i = 0;
@Override
public void run() {
// TODO Auto-generated method stub
// 对象锁代码块形式
synchronized(this){ // 启动后,线程执行完毕后,再执行下一个的顺序执行。
System.out.println(i + "-->" + Thread.currentThread().getName());
try {
Thread.sleep(3000L);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(i + "-->" + Thread.currentThread().getName() +" end");
}
}
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
Thread t1 = new Thread(rt);
Thread t2 = new Thread(rt);
t1.start();
t2.start();
// t1.join();// 线程执行完毕之后,才继续执行主程序内容。
// t2.join();
// 第二种方法,线程执行完毕之后,才继续执行主程序内容。
while(t1.isAlive() || t2.isAlive()){
}
System.out.println("-->" + i);
}
}
执行效果输出
0-->Thread-0
0-->Thread-0 end
0-->Thread-1
0-->Thread-1 end
-->0