锁(synchronized):
既然线程之间是并发执行,就必然会有资源冲突的时候,如果不加以限制,很可能会出现死锁现象,这时就需要锁来对线程获取资源的限制
程序中,可以给类,方法,代码块加锁。
1.方法锁,也叫对象锁:synchronized修饰方法
package com.lan.lock;
public class SThread implements Runnable{
    private static int count=0;
@Override
public synchronized void run() {
System.out.println("111111");
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + ":" + count++);
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

package com.lan.lock;
public class SClass {
public static void main(String[] args) {

   SThread st = new SThread();
new Thread(st, "t1").start();
new Thread(st,"t2").start();

    }
}
synchronized修饰方法,即对象锁,如果同一个对象的多个线程访问该方法是就会同步,比如上面的t1、t2是同一个对象st的两个线程,
当他们访问到run()方法时,先访问方法的对象拿到后就会对该方法上锁,后面的对象只有等前一个释放该锁才能继续执行。

2.代码块锁:synchronized修饰代码块,用this关键字修饰代码块

package com.lan.lock;

public  class  SThread  implements Runnable{
private static int count=0;
@Override
public void run() {
System.out.println("111111");
synchronized (this) {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + ":" + count++);
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}

synchronized修饰this代码块也属于对象锁,当对象访问到该this代码块时就会被同步,锁代码块很大程度上减小了锁的范围,降低对象等待的时间

3.类锁:synchronized 修饰static方法变类锁
形式1:
private static synchronized void method1(){

        try {



            System.out.println(Thread.currentThread().getName());



            Thread.sleep(4000);



        } catch (InterruptedException e) {

             e.printStackTrace();

         }

   }

形式2:
public class SThread implements Runnable{
    private static int count=0;
@Override
public void run() {
System.out.println("111111");
synchronized (SThread.class) { //类锁,修饰静态方法
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + ":" + count++);
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} }
}
如果synchironized修饰了静态方法,那么该方法就属于类锁,类锁是锁住整个类,这时无论多少个对象,多少个线程访问该方法都会被锁同步。
 

Java_锁Synchronized的更多相关文章

  1. 同步中的四种锁synchronized、ReentrantLock、ReadWriteLock、StampedLock

    目录 1.synchronized同步锁 2.ReentrantLock重入锁 3.ReadWriteLock读写锁 4.StampedLock戳锁(目前没找到合适的名字,先这么叫吧...) 5.总结 ...

  2. Java锁Synchronized对象锁和类锁区别

    java的内置锁:每个java对象都可以用做一个实现同步的锁,这些锁成为内置锁.线程进入同步代码块或方法的时候会自动获得该锁,在退出同步代码块或方法时会释放该锁.获得内置锁的唯一途径就是进入这个锁的保 ...

  3. java 偏向锁、轻量级锁及重量级锁synchronized原理

    Java对象头与Monitor java对象头是实现synchronized的锁对象的基础,synchronized使用的锁对象是存储在Java对象头里的. 对象头包含两部分:Mark Word 和 ...

  4. 同步中的四种锁synchronized、ReentrantLock、ReentrantReadWriteLock、StampedLock

    为了更好的支持并发程序,JDK内部提供了多种锁.本文总结4种锁. 1.synchronized同步锁 使用: synchronized本质上就2种锁: 1.锁同步代码块 2.锁方法 可用object. ...

  5. [转]Java 对象锁-synchronized()与线程的状态与生命周期

      线程的状态与生命周期 Java 对象锁-synchronized() ? 1 2 3 4 synchronized(someObject){   //对象锁 } 对象锁的使用说明: 1.对象锁的返 ...

  6. jvm内置锁synchronized不能被中断

    很久没看技术书籍了,今天看了一下<七周七并发模型>前面两章讲的java,写的还是有深度的.看到了一个有demo,说jvm内置锁synchronized是不能被中断的.照着书上写了个demo ...

  7. 深入理解java内置锁(synchronized)和显式锁(ReentrantLock)

    多线程编程中,当代码需要同步时我们会用到锁.Java为我们提供了内置锁(synchronized)和显式锁(ReentrantLock)两种同步方式.显式锁是JDK1.5引入的,这两种锁有什么异同呢? ...

  8. Java锁-Synchronized深层剖析

    Java锁-Synchronized深层剖析 前言 Java锁的问题,可以说是每个JavaCoder绕不开的一道坎.如果只是粗浅地了解Synchronized等锁的简单应用,那么就没什么谈的了,也不建 ...

  9. 深入理解java:2.2. 同步锁Synchronized及其实现原理

    同步的基本思想 为了保证共享数据在同一时刻只被一个线程使用,我们有一种很简单的实现思想,就是 在共享数据里保存一个锁 ,当没有线程访问时,锁是空的. 当有第一个线程访问时,就 在锁里保存这个线程的标识 ...

随机推荐

  1. vnc安装

    安装命令:yum install tigervnc-server 一.启动VNC服务 输入命令 vncserver ps -ef|grep Xvnc vncserver -geometry 800x6 ...

  2. 使用透明flash+背景图片制作绚丽页面

    关键代码: <div style="width: 469px; height: 303px; background-image: url('https://images0.cnblog ...

  3. Java程序设计19——类的加载和反射-Part-A

    1 本文概要 本章介绍Java类的加载.连接和初始化的深入知识,并重点介绍Java反射相关的内容.本章知识偏底层点,这些运行原理有助于我们更好的把我java程序的运行.而且Java类加载器除了根加载器 ...

  4. DataStage 错误集(持续更新)

    DataStage 错误集(持续更新) DataStage序列文章 DataStage 一.安装 DataStage 二.InfoSphere Information Server进程的启动和停止 D ...

  5. 20155209 2016-2017-2 《Java程序设计》第七周学习总结

    20155209 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 认识时间与日期 时间的度量 GMT(Greenwich Mean Time) 时间:现在不是 ...

  6. jquery对属性和特性的操作

    attribute(特性)和property(属性)是两个不同的概念.attribute表示HTML文档节点的特性,property表示DOM元素的属性 这些属性例如selectedIndex, ta ...

  7. Java® Language Specification

    Java™ Platform, Standard Edition 8 API Specification http://docs.oracle.com/javase/8/docs/api/ The J ...

  8. [转]解决Mysql InnoDB: Failing assertion: ret || !assert_on_error问题

    国庆回来后,发现mysql停止服务了,没办法继续启动了.查看日志,看到: 131008 09:56:03 mysqld_safe Starting mysqld daemon with databas ...

  9. logback 热修改

    <configuration scan="true" scanPeriod="60 seconds" debug="false"> ...

  10. JQuery --- 第五期 (JQuery节点操作)

    学习笔记 1.JQuery添加节点相关方法 <!DOCTYPE html> <html lang="en"> <head> <meta c ...