2.2.9静态方法同步与实例方法同步
来源:互联网 发布:c 网络通信 编辑:程序博客网 时间:2024/06/05 17:23
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持有的是对象锁。
阅读全文
0 0
- 2.2.9静态方法同步与实例方法同步
- 静态同步方法与非静态同步方法的区别
- 同步静态方法与同步非静态方法
- java synchronized:(实例方法同步、静态方法同步)区别
- 2.2.9同步静态方法与synchronized(class)
- java synchronized静态同步方法与非静态同步方法,同步语句块
- java synchronized静态同步方法与非静态同步方法,同步语句块
- java synchronized静态同步方法与非静态同步方法,同步语句块
- java synchronized静态同步方法与非静态同步方法,同步语句块
- synchronized静态同步方法与非静态同步方法,同步语句块
- java synchronized静态同步方法与非静态同步方法,同步语句块
- java synchronized静态同步方法与非静态同步方法,同步语句块
- JAVA静态方法同步
- 多线程静态方法同步
- 多线程静态方法同步
- 同步方法(非静态)
- 同步静态方法
- 2.2.9同一个类的不同静态方法不同实例不同线程是同步的
- BUG集
- Java day5
- Android 事件分发机制源码攻略(三) —— View篇
- 下拉刷新上拉加载框架:PtrClassicFrameLayout
- OpenGL GLSL 语法和函数详解
- 2.2.9静态方法同步与实例方法同步
- CodeForces
- android UI-屏幕显示
- 逆序的三位数
- win7配置vue环境
- 32位x86体系linux虚拟地址空间
- html 窗口管理
- Window平台VPN搭建
- java中枚举的用法