2.2.9静态方法同步与实例方法同步
2017-10-12 00:01
363 查看
package cha02.execise23; /** * Created by sunyifeng on 17/9/27. */ public class Service { // 静态方法A synchronized public static void printA() { try { System.out.println("进入方法printA,线程名称:" + Thread.currentThread().getName() + ",当前时间" + System.currentTimeMillis()); Thread.sleep(5000); System.out.println("离开方法printA,线程名称:" + Thread.currentThread().getName() + ",当前时间" + System.currentTimeMillis()); } catch (InterruptedException e) { e.printStackTrace(); } } // 静态方法B synchronized public static void printB() { System.out.println("进入方法printB,线程名称:" + Thread.currentThread().getName() + ",当前时间" + System.currentTimeMillis()); System.out.println("离开方法printB,线程名称:" + Thread.currentThread().getName() + ",当前时间" + System.currentTimeMillis()); } // 实例方法C synchronized public void printC() { System.out.println("进入方法printC,线程名称:" + Thread.currentThread().getName() + ",当前时间" + System.currentTimeMillis()); System.out.println("离开方法printC,线程名称:" + Thread.currentThread().getName() + ",当前时间" + System.currentTimeMillis()); } }
package cha02.execise23; /** * Created by sunyifeng on 17/9/27. */ public class ThreadA extends Thread { private Service service; public ThreadA(Service service) { super(); this.service = service; } @Override public void run(){ service.printA(); // } }
package cha02.execise23; /** * Created by sunyifeng on 17/9/27. */ public class ThreadB extends Thread { private Service service; public ThreadB(Service service) { super(); this.service = service; } @Override public void run() { service.printB();// } }
package cha02.execise23; /** * Created by sunyifeng on 17/9/27. */ public class ThreadC extends Thread { private Service service; public ThreadC(Service service) { super(); this.service = service; } @Override public void run() { service.printC(); // } }
package cha02.execise23; /** * Created by sunyifeng on 17/9/27. */ public class Run { public static void main(String[] args) { Service service = new Service(); // ThreadA threadA = new ThreadA(service); threadA.setName("A"); threadA.start(); // ThreadB threadB = new ThreadB(service); threadB.setName("B"); threadB.start(); // ThreadC threadC = new ThreadC(service); threadC.setName("C"); threadC.start(); } }
运行结果:
进入方法printA,线程名称:A,当前时间1507737435167
进入方法printC,线程名称:C,当前时间1507737435169
离开方法printC,线程名称:C,当前时间1507737435170
离开方法printA,线程名称:A,当前时间1507737440171
进入方法printB,线程名称:B,当前时间1507737440171
离开方法printB,线程名称:B,当前时间1507737440172
程序分析:
1、三个线程是异步执行的,线程A、线程B同步执行,线程C异步执行;
2、线程A、线程B持有的是class锁,线程C持有的是对象锁。
相关文章推荐
- 2.2.9同一个类的不同静态方法不同实例不同线程是同步的
- 2.2.9同步静态方法与synchronized(class)
- 2.2.9同步静态方法和synchronized(class)效果一样
- java synchronized:(实例方法同步、静态方法同步)区别
- JAVA 开发之用静态方法返回类名的实例详解
- python 中的实例方法,静态方法以及类方法
- java 静态方法和实例方法的区别
- java 程序加载过程---3--类中申明同时申明类的静态对象 创建类的实例 访问类的静态变量 调用类的静态方法 使用反射方法 初始化类的子类对象 直接使用java.exe 调用某个类
- 静态同步方法-同步锁为:类名.class
- IOS:类方法(静态方法)和实例方法
- Python类变量,实例变量,类方法,实例方法,静态方法的分析
- python学习笔记-实例方法、类方法、静态方法、属性方法
- 实例方法和静态方法的详解
- c#静态方法和实例方法误区(转自一位前辈的博文)
- Python的类方法,静态方法,实例方法的区别
- 关于c#静态方法和实例方法的辨析和应用
- Java线程同步、同步方法实例详解
- python实例方法、类方法和静态方法
- Java 静态方法和实例方法的区别
- 从头认识多线程-2.16 同步静态方法和静态代码块