001JAVA多线程实例对象锁与类锁

package com.skcc.mthread;

public class MuiltThread {

private static int num = 0;

public MuiltThread() {
    // TODO Auto-generated constructor stub
}

/****
 *   synchronized void printNum(String tag)  代表 synchronized锁定的MuiltThread实例对象锁(m1,m2两者间互不影响)
 *   static  synchronized void printNum(String tag) 代表synchronized 竞争的是MuiltThread类锁
 *
 * ****/
public static  synchronized void printNum(String tag) {
    try {
        if(tag.equals("a")) {
            num = 100;
            System.out.println("tag a,num 100 set over.");
            //Thread.sleep(1000);
        }
        else {
            num=200;
            System.out.println("tag b,num 200 set over.");
        }
        System.out.println("tag is " + tag + "  num is "+ num);
    } catch (Exception e) {
        // TODO: handle exception
    }
}

public static void main(String[] args) {
    // TODO Auto-generated method stub

    MuiltThread m1 = new MuiltThread();
    MuiltThread m2 = new MuiltThread();

    Thread t1 = new Thread(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            //m1.printNum("a");
            MuiltThread.printNum("a");
        }
    });

    Thread t2 = new Thread(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub

// m2.printNum("b");
MuiltThread.printNum("b");
}
});

    t1.start();
    t2.start();
}

}

原文地址:https://blog.51cto.com/6000734/2369767

时间: 2024-10-31 21:09:01

001JAVA多线程实例对象锁与类锁的相关文章

Java对象锁和类锁全面解析(多线程synchronized关键字)

最近工作有用到一些多线程的东西,之前吧,有用到synchronized同步块,不过是别人怎么用就跟着用,并没有搞清楚锁的概念.最近也是遇到一些问题,不搞清楚锁的概念,很容易碰壁,甚至有些时候自己连用没用对都不知道. 今天把一些疑惑都解开了,写篇文章分享给大家,文章还算比较全面.当然可能有小宝鸽理解得不够深入透彻的地方,如果说得不正确还望指出. 看之前有必要跟某些猿友说一下,如果看一遍没有看明白呢,也没关系,当是了解一下,等真正使用到了,再回头看. 本文主要是将synchronized关键字用法作

从头认识多线程-2.2 synchronized持有对象锁与类锁的相同点

这一章节我们来讨论一下synchronized持有对象锁与类锁的相同点. 1.当所有方法都不使用同步的时候 代码清单 package com.ray.deepintothread.ch02.topic_2; public class SynchInstance1 { public static void main(String[] args) throws InterruptedException { MyTestObjectOne myTestObjectOne = new MyTestObj

从头认识多线程-2.3 synchronized持有对象锁与类锁的不同点

这一章节我们来讨论游戏,synchronized持有对象锁与类锁的不同点-两种锁是并行的东西,没有交集. 1.同步持有对象锁或者类锁 package com.ray.deepintothread.ch02.topic_3; public class SynchInstance5 { public static void main(String[] args) throws InterruptedException { MyTestObjectFive myTestObjectFive = new

synchronize——对象锁和类锁

最近在研究Java 多线程的只是,经常能看到synchronize关键字,以前只是一眼带过,没有细究,今天趁这个机会,整理下 synchronize作为多线程关键字,是一种同步锁,它可以修饰以下几种对象: 代码块:被修饰的代码块称为同步语句块,其作用的范围是大括号{ }里的代码,作用的对象是调用这个代码块的对象: 方法:被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象 静态方法:作用的范围是整个静态方法,作用的对象是这个类的所有对象 类:作用的范围是synchro

Java学习(十一):Java锁Synchronized,对象锁和类锁举例

Java的锁分为对象锁和类锁. 1. 当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内针对该对象的操作只能有一个线程得到执行.另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块. 2. 然而,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块. 3. 尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对该object中所有其它sync

【Thread】java线程之对象锁、类锁、线程安全

说明: 1.个人技术也不咋滴.也没在项目中写过线程,以下全是根据自己的理解写的.所以,仅供参考及希望指出不同的观点. 2.其实想把代码的github贴出来,但还是推荐在初学的您多亲自写一下,就没贴出来了. 一.基本说明 类.对象:...(不知道怎么说,只可意会不可言传>.<!):要明白哪些方法.变量是对象的,哪些是类的. 类锁.对象锁:对应类和对象.每个类有且仅有一个类锁,每个对象有且仅有一个对象锁. ex: Person p1 = new Person(); Person p2 = new

java 对象锁和类锁的区别(转)

java 对象锁和类锁的区别   转自 <http://zhh9106.iteye.com/blog/2151791> 在java编程中,经常需要用到同步,而用得最多的也许是synchronized关键字了,下面看看这个关键字的用法. 因为synchronized关键字涉及到锁的概念,所以先来了解一些相关的锁知识. java的内置锁:每个java对象都可以用做一个实现同步的锁,这些锁成为内置锁.线程进入同步代码块或方法的时候会自动获得该锁,在退出同步代码块或方法时会释放该锁.获得内置锁的唯一途

java的同步方法和同步代码块,对象锁,类锁区别

/** * @author admin * @date 2018/1/12 9:48 * 作用在同一个实例对象上讨论 * synchronized同步方法的测试 * 两个线程,一个线程调用synchronized修饰方法,另一个线程可以调用非synchronized修饰的方法,互不影响 */ public class SynchronizedTest { public synchronized void methodA() { try { for (int i = 0; i < 5; i++)

synchronized关键字以及对象锁和类锁的区别

java并发编程中最长用到的关键字就是synchronized了,这里讲解一下这个关键字的用法和容易混淆的地方.synchronized关键字涉及到锁的概念, 在java中,synchronized锁大家又通俗的称为:方法锁,对象锁 和 类锁 三种. 先上结论! 1 无论是修饰方法还是修饰代码块都是 对象锁,当一个线程访问一个带synchronized方法时,由于对象锁的存在,所有加synchronized的方法都不能被访问(前提是在多个线程调用的是同一个对象实例中的方法)2 无论是修饰静态方法