java基础

1.使用特殊域变量(volatile)实现线程同步
 
    a.volatile关键字为域变量的访问提供了一种免锁机制, 
    b.使用volatile修饰域相当于告诉虚拟机该域可能会被其他线程更新, 
    c.因此每次使用该域就要重新计算,而不是使用寄存器中的值 
    d.volatile不会提供任何原子操作,它也不能用来修饰final类型的变量 
 
2.同步代码块和同步方法的区别
同步方法只能以当前类对象为锁,而同步代码块可以以任何对象为锁
public class SynchronizeCode {
   public static void main(String[] args) {
       /************ 创建锁对象 ************/
       final Object lock = new Object();
       /************ 开启线程一 ************/
       new Thread() {
           public void run() {
               while (true) {
                   synchronized (lock) {
                       System.out.print("同步");
                       System.out.println("代码");
                   }
               }
           };
       }.start();
       /************ 开启线程二 ************/
       new Thread() {
           public void run() {
               while (true) {
                   synchronized (lock) {
                       System.out.print("Synchronize");
                       System.out.println("Code");
                   }
               }
           };
       }.start();
   }
}
在同步中,可以将某个对象设为锁,当持有锁时,则可以执行方法,反而,如果不持有锁,就会陷入阻塞的状态,等待上一个使用者释放锁,如果上一个使用者一直不释放锁,就会造成死锁
posted @ 2016-09-09 17:43  麦子TMAC  阅读(160)  评论(0编辑  收藏  举报