最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

Java多线程并发笔记03synchronized减小锁粒度,优化代码执行时间

IT圈 admin 2浏览 0评论

Java多线程并发笔记03 synchronized减小锁粒度,优化代码执行时间

 

 示例代码1:可以对任意Object对象进行加锁

public class ObjectLock {public void method1(){synchronized (this) {//对象锁try {System.out.println("method1......");Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}}public void method2(){synchronized (ObjectLock.class) {//类锁try {System.out.println("method2......");Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}}private Object lock = new Object();public void method3(){synchronized (lock) {//任何对象锁try {System.out.println("method3......");Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}}public static void main(String[] args) {final ObjectLock ol = new ObjectLock();Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {ol.method1();}},"t1");Thread t2 = new Thread(new Runnable() {@Overridepublic void run() {ol.method2();}},"t2");Thread t3 = new Thread(new Runnable() {@Overridepublic void run() {ol.method3();}},"t3");t1.start();t2.start();t3.start();}
}

示例程序2:String 字符串锁

package com.bjsxt.thread.sync006;public class StringLock {public void method() {//如果锁是非new出来的,那么就是一个常量,则被独占while(true)死循环,,若是被new出来的,则2个对象/*** 当前线程t2开始当前线程t1开始当前线程t1结束当前线程t2结束*/
//		synchronized (new String("字符串常量")) {/*** 当前线程t1开始当前线程t1结束当前线程t1开始当前线程t1结束*/synchronized ("字符串常量") {try {while(true) {System.out.println("当前线程"+Thread.currentThread().getName()+"开始");Thread.sleep(2000);System.out.println("当前线程"+Thread.currentThread().getName()+"结束");}} catch (InterruptedException e) {e.printStackTrace();}}}public static void main(String[] args) {final StringLock ol = new StringLock();Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {ol.method();}},"t1");Thread t2 = new Thread(new Runnable() {@Overridepublic void run() {ol.method();}},"t2");t1.start();t2.start();}
}

 

Java多线程并发笔记03 synchronized减小锁粒度,优化代码执行时间

 

 示例代码1:可以对任意Object对象进行加锁

public class ObjectLock {public void method1(){synchronized (this) {//对象锁try {System.out.println("method1......");Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}}public void method2(){synchronized (ObjectLock.class) {//类锁try {System.out.println("method2......");Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}}private Object lock = new Object();public void method3(){synchronized (lock) {//任何对象锁try {System.out.println("method3......");Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}}public static void main(String[] args) {final ObjectLock ol = new ObjectLock();Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {ol.method1();}},"t1");Thread t2 = new Thread(new Runnable() {@Overridepublic void run() {ol.method2();}},"t2");Thread t3 = new Thread(new Runnable() {@Overridepublic void run() {ol.method3();}},"t3");t1.start();t2.start();t3.start();}
}

示例程序2:String 字符串锁

package com.bjsxt.thread.sync006;public class StringLock {public void method() {//如果锁是非new出来的,那么就是一个常量,则被独占while(true)死循环,,若是被new出来的,则2个对象/*** 当前线程t2开始当前线程t1开始当前线程t1结束当前线程t2结束*/
//		synchronized (new String("字符串常量")) {/*** 当前线程t1开始当前线程t1结束当前线程t1开始当前线程t1结束*/synchronized ("字符串常量") {try {while(true) {System.out.println("当前线程"+Thread.currentThread().getName()+"开始");Thread.sleep(2000);System.out.println("当前线程"+Thread.currentThread().getName()+"结束");}} catch (InterruptedException e) {e.printStackTrace();}}}public static void main(String[] args) {final StringLock ol = new StringLock();Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {ol.method();}},"t1");Thread t2 = new Thread(new Runnable() {@Overridepublic void run() {ol.method();}},"t2");t1.start();t2.start();}
}

 

发布评论

评论列表 (0)

  1. 暂无评论