synchronized 的作用与用法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/HYJ940228/article/details/102724399

synchronized 的作用与用法

  1. 方法声明时使用,放在范围操作符(public等)后,其返回类型声明(void等)之前。即一次只能有一个线程进入该方法,其他线程要想在此时调用该方法,只能排队等候,当前线程(就是在synchronized方法内部的线程)执行完该方法后,别的线程才能进入。
		   public synchronized void synMethod() {
		   //方法体
		   }
		   
  1. 对某一代码块使用,synchronized后跟括号,括号里是变量,这样,一次只有一个线程进入该代码块。
					   public int synMethod(Object a1){
					   synchronized(Object) {
					   //一次只能有一个线程进入
					   	}
					   }
  1. synchronized后面括号里是一对象,此时,线程获得的是对象锁。
        
		public class MyThread implements Runnable {
        public static void main(String args[]) {
        MyThread mt = new MyThread();
        Thread t1 = new Thread(mt, "t1");
        Thread t2 = new Thread(mt, "t2");
        Thread t3 = new Thread(mt, "t3");
        Thread t4 = new Thread(mt, "t4");
        Thread t5 = new Thread(mt, "t5");
        Thread t6 = new Thread(mt, "t6");
        t1.start();
        t2.start();
        t3.start();
        t4.start();
        t5.start();
        t6.start();
        			}
		//如果线程进入,则得到对象锁,那么别的线程在该类所有对象上的任何操作都不能进行。在对象级使用锁通常是一种比较粗糙的方法。
            
        public void run() {
        synchronized (this) { //这里的this则为MyThread对象
        System.out.println(Thread.currentThread().getName());
        		}
        	}
        }

猜你喜欢

转载自blog.csdn.net/HYJ940228/article/details/102724399