- synchronized这个关键字要修饰一段代码。
- 一个线程(Thread)要运行一段代码,要获得的锁有两种 对象锁和类锁.
对象锁:thread要获得某个具体的对象的的锁,才能运行这段代码.
类锁: thread要获得这个类的锁,才能运行这段代码.
下面就按这两种锁来分类
1. 对象锁
a. synchronized 修饰普通方法
synchronized void syncMethod() {}
b. synchronized 修饰代码块
void method(Foo foo) {
synchronized(foo) {
}
}
[注]
synchronized void syncMethod() {}跟
void method() {
synchronized(this) {
}
}
效果是一样的。
2. 类锁
c. synchronized 修饰static方法
synchronized void static syncStaticMethod() {}
d. synchronized 修饰代码块
class Foo {
void method() {
synchronized(Foo.class) {
}
}
}
[注]c和d的效果是一样的。
Tips:
i. synchronized关键字放在void之前, public 之后
[补充1]
看到synchronized修饰runnable 的run方法。
package com.test.testrun;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
class SyncRun implements Runnable {
public void run() {
// synchronized(this) { //point 1
for (int i = 0; i < 100; i++) {
System.out.println(i);
Thread.yield();
}
// }
}
}
public class TestRunMethod {
public static void main(String[] args) {
ExecutorService exec = Executors.newCachedThreadPool();
SyncRun r = new SyncRun();
for (int i = 0; i < 10; i++) {
// exec.execute(new SyncRun()); //point 2
new Thread(r).start();
}
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
exec.shutdownNow();
}
}
1. run方法里把synchronized注释掉,运行。
结果很乱.
2. run方法把里用synchronized修饰,运行。
结果很整齐.
point 2不知道有什么用!!!
分享到:
相关推荐
java同步synchronized关键字用法示例
java多线程中synchronized关键字的用法 解压密码 www.jiangyea.com
synchronized关键字在java中的重要性 以及常用的方法 还有它的详解
Synchronized关键字的用法
java基本教程之synchronized关键字java多线程教程共19页.pdf.zip
并发编程原理学习:synchronized关键字.doc
Lock接口与synchronized关键字在Java并发编程中都是用于实现同步机制的重要工具,但它们在使用方式、功能特性以及灵活性等方面存在一些显著的差异。 首先,从使用方式上来看,synchronized是Java语言内置的关键字,...
java的线程同步机制synchronized关键字的理解_.docx
线程安全,使用synchronized关键字
java synchronized关键字原理、自定义一把锁来实现同步等
Java多线程synchronized关键字详解(六)共5页.pdf.zip
【Java并发编程】Synchronized关键字实现原理.doc
5-4JVM内置锁synchronized关键字详解.mp4
实例解析Java中的synchronized关键字与线程平安问题_.docx
【ASP.NET编程知识】实例解析Java中的synchronized关键字与线程安全问题.docx
主要介绍了Java中synchronized关键字的用法,针对synchronized修饰方法的使用作出了简单讲解和演示,需要的朋友可以参考下
Java并发编程---synchronized关键
NULL 博文链接:https://seandsky-boyy-163-com.iteye.com/blog/1340783
volatile 关键字是线程同步的轻量级实现,所以volatile 性能肯定比synchronized关键字要好。但是volatile 关键字只能用于变量而 synchronized 关键字可以修饰方法以及代码块 volatile 关键字能保证数据的可见性,但...