博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
synchronized与static synchronized的区别
阅读量:3945 次
发布时间:2019-05-24

本文共 2048 字,大约阅读时间需要 6 分钟。

大家在学习java多线程的时候肯定会遇到这个问题,而且在面试的时候也可能会谈到java多线程这一块的知识。今天我们就来看看这个东西~~~

synchronized 这个是对类实例进行加锁,可以简称为“实例锁”或者是“对象锁”。当某个线程调用synchronized方法的时候,就会给它加上了一个锁,其他线程就会无法访问,等到这个锁被释放,别的线程拿到这个锁的时候,才可以访问该方法。

static synchronized这个是“全局锁”或者是“类锁”,该锁针对的是类,不管实例了多少个对象,线程都共享该锁。

下面我们来看代码:

import java.util.concurrent.TimeUnit;public class Test {
public static void main(String[] args) {
Phone phone1 = new Phone(); Phone phone2 = new Phone(); //这里使用的是lambda表达式 new Thread(() -> {
phone1.listening(); }, "A线程").start(); try {
TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) {
e.printStackTrace(); } new Thread(() -> {
phone2.reading(); }, "B线程").start(); }}class Phone{
public static synchronized void listening() {
try {
TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) {
e.printStackTrace(); } System.out.println("该手机正在播放音乐~"); } public static synchronized void reading() {
System.out.println("该手机正在显示电子书~"); }}

运行结果是:

在这里插入图片描述
但是当我把reading方法上的static 这个关键字去掉后,代码是这样的 :

import java.util.concurrent.TimeUnit;public class Test {
public static void main(String[] args) {
Phone phone1 = new Phone(); Phone phone2 = new Phone(); //这里使用的是lambda表达式 new Thread(() -> {
phone1.listening(); }, "A线程").start(); try {
TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) {
e.printStackTrace(); } new Thread(() -> {
phone2.reading(); }, "B线程").start(); }}class Phone{
public static synchronized void listening() {
try {
TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) {
e.printStackTrace(); } System.out.println("该手机正在播放音乐~"); } public synchronized void reading() {
System.out.println("该手机正在显示电子书~"); }}

结果是:

在这里插入图片描述
好了,大家在仔细品品~~~

转载地址:http://djlwi.baihongyu.com/

你可能感兴趣的文章
Handling the Results 处理结果
查看>>
如何内置iperf到手机中
查看>>
如何adb shell进入ctia模式
查看>>
Contacts Provider 联系人存储
查看>>
android 图库播放幻灯片时灭屏再亮屏显示keyguard
查看>>
android 图库语言更新
查看>>
android camera拍照/录像后查看图片/视频并删除所有内容后自动回到camera预览界面
查看>>
android 图库中对非mp4格式的视频去掉"修剪"功能选项
查看>>
how to disable watchdog
查看>>
android SDIO error导致wifi无法打开或者连接热点异常的问题
查看>>
android USB如何修改Serial Number or SN?
查看>>
android 用svn管理的版本编译出来有问题
查看>>
android 如何用jar包代替java代码编译
查看>>
android 数据连接关闭的情况下如何让彩信发不出去
查看>>
android 编辑彩信,加入几页铃声,预览暂停界面,铃声名字不见了
查看>>
android 在新建短信时,加入名称为","(英文逗号)的联系人时,应用崩溃的修改
查看>>
android 关于LCD背光调节渐变过程引起背光闪烁问题
查看>>
android 保存具有不同前缀的同一号码分别为A和B,用其中一个呼叫,通话记录一直显示另一个联系人名字的问题
查看>>
android 在手机中预置联系人/Service Number
查看>>
android 系统语言为英语时,Contacts联系人名字含有特殊前缀后缀(Dr. Mr. Lt等)时的相关问题处理
查看>>