多线程(同步代码块和同步函数)

线程安全问题

    当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,
    另一个线程参与进来执行。导致共享数据的错误。

解决办法:
    对多条操作共享数据的语句,只能让一个线程都执行完。在执行过程中,其他线程不可以参与执行。

Java对于多线程的安全问题提供了专业的解决方式。
就是同步代码块。

synchronized(对象)
{
    需要被同步的代码
}
对象如同锁。持有锁的线程可以在同步中执行。
没有持有锁的线程即使获取cpu的执行权,也进不去,因为没有获取锁。

同步的前提:
1,必须要有两个或者两个以上的线程。
2,必须是多个线程使用同一个锁。


必须保证同步中只能有一个线程在运行。

好处:解决了多线程的安全问题。
弊端:多个线程需要判断锁,较为消耗资源,

 

多线程程序中如何找问题(那些代码该同步、那些不该同步):

1.明确那些代码是多线程运行代码。

2.明确共享数据。

3.明确多线程运行代码中那些语句是操作共享数据的。

同步函数(将关键字synchronized作为修饰符修饰函数,使其具有同步性)

//同步函数
class bank
{int money;//将同步关键字synchronized方在方法中作为修饰符,使方法具有同步性public synchronized void add(int i){money = money+i;}
}class people implements Runnable
{private bank b = new bank();public void run(){for(int i=0;i<3;i++){b.add(100);System.out.println(Thread.currentThread().getName()+"存入了"+100+"元");System.out.println("金库中的金额为:"+b.money);}}
}class userMain
{public static void main(String [] args){people p = new people();Thread t1 = new Thread(p);Thread t2 = new Thread(p);t1.start();t2.start();}
}
View Code

 同步函数中使用的锁是this

如果同步函数被静态修饰后,使用的锁是什么呢?

通过验证,发现不在是this。因为静态方法中也不可以定义this。

静态进内存是,内存中没有本类对象,但是一定有该类对应的字节码文件对象。
类名.class  该对象的类型是Class


静态的同步方法,使用的锁是该方法所在类的字节码文件对象。 类名.class

转载于:https://www.cnblogs.com/gzc911/p/4905841.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258167.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

没有基础学python_python没有基础好学吗

什么是Python&#xff1f;Python是一种计算机程序设计语言。你可能已经听说过很多种流行的编程语言&#xff0c;比如非常难学的C语言&#xff0c;非常流行的Java语言&#xff0c;适合初学者的Basic语言&#xff0c;适合网页编程的JavaScript语言等&#xff0c;Python是他们其中…

C++中的头文件和源文件

一、C编译模式 通常&#xff0c;在一个C程序中&#xff0c;只包含两类文件——cpp文件和h文件。cpp文件被称作C源文件&#xff0c;里面放的都是C的源代码&#xff1b;h文件则被称作C头文件&#xff0c;里面放的也是C的源代码。 C 语言支持“分别编译”&#xff08;separ…

Hibernate 事物隔离级别 深入探究

目录 一、数据库事务的定义 二、数据库事务并发可能带来的问题 三、数据库事务隔离级别 四、使用Hibernate设置数据库隔离级别 五、使用悲观锁解决事务并发问题 六、使用乐观锁解决事务并发问题 Hibernate事务与并发问题处理&#xff08;乐观锁与悲观锁&#xff09; 一、数据库…

Linked List Cycle II - LeetCode

Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Note: Do not modify the linked list. Follow up:Can you solve it without using extra space? 思路&#xff1a;维护两个指针slow和fast。先判断是否存在环。 在判断是否…

mysql 无论输入什么都是现实 not found_NotAPanda

前言面试竞争力越来越大&#xff0c;是时候撸一波Vue和React源码啦&#xff1b;本文从20个层面来对比Vue和React的源码区别&#xff1b;如果需要了解API的区别&#xff0c;请戳&#xff1a;Vue 开发必须知道的 36 个技巧React 开发必须知道的 34 个技巧文章源码&#xff1a;请戳…

这五张PPT告诉你,如何打造无人驾驶“最强大脑”

“英特尔在谈无人驾驶&#xff0c;会成为汽车制造商吗?NO!我们要为无人驾驶提供从车、连接到云的‘最强大脑’。” 在昨天于北京举行的英特尔无人驾驶分享会上&#xff0c;英特尔无人驾驶事业部中国区市场总监徐伟杰在主旨演讲中开门见山。 这也是英特尔无人驾驶事业部去年11月…

javascript之ua与urlSchema

我们首先拿到浏览器ua: 1 var ua navigator.userAgent; 1 if (ua.indexOf("MicroMessenger") > -1) { 2 alert("微信浏览器"); 3 } 1 if (ua.indexOf("iPhone") > -1) { 2 alert("iphone"); 3 } 其…

ezdpl Linux自动化部署实战

最近把ezdpl在生产环境中实施了&#xff0c;再加上这段时间的一些修改&#xff0c;一并介绍一下。再次申明&#xff1a; ezdpl不是开箱即用的&#xff0c;需要根据自己的应用环境定制。对初学者来说使用起来反倒困难更多、风险更大。它不是一个通用的项目&#xff0c;更多的是提…

无法打开输入文件mysql_错误LNK1181,pip安装“无法打开输入文件”mysqlclient.lib'...

我是Python新手&#xff0c;正在尝试安装mysql模块&#xff0c;但是在解决了其他5个问题之后&#xff0c;我现在遇到了一个问题&#xff0c;当我尝试安装该模块时&#xff0c;会出现以下日志&#xff1a;PS C:\Users\poste> pip install mysqlCollecting mysqlUsing cached …

俄罗斯将封杀LinkedIn 推动个人数据本地化

北京时间11月11日上午消息&#xff0c;莫斯科一家法院本周四支持了在俄罗斯封杀职业社交网站LinkedIn的决定。 俄罗斯联邦通信监管局&#xff08;Roskomnadzor&#xff09;之前要求国内外企业从2015年9月开始&#xff0c;必须将所有俄罗斯用户的个人数据存储在该国境内。Linked…

python的datetime举例_Python datetime模块的使用示例

1、获取当前年月日时分秒# -*- encodingutf-8 -*-import datetimenow datetime.datetime.now()print("now:{}".format(now))year now.yearprint("year:{}".format(year))month now.monthprint("month:{}".format(month))day now.dayprint(&q…

vs2015 去除 git 源代码 绑定,改成向tfs添加源码管理

除了下文的方法是将源码管理从git改成tfs之外&#xff0c;还要做以下几步即可 向tfs添加源码 打开源码管理(管理连接)&#xff0c;双击打开你要向其中添加的tfs连接选中该解决方案&#xff0c;右键 将解决方案添加到源码管理嵌入完毕vs2015 去除 git 源代码 绑定 第一次碰到这个…

HDU 4609 FFT

题目大意 给定n条边的边值&#xff0c;求任意取三条边能组成三角形的概率 这里概率 P valid/tot tot (n-2)*(n-1)*n/6是没问题的 valid表示合法的方式 先考虑&#xff0c;任意两条边组合形成方法的总数 因为边值在100000的范围内&#xff0c;这里组合用fft计算 得到最后形成和…

《日志管理与分析权威指南》一2.3 良好日志记录的标准

本节书摘来华章计算机《日志管理与分析权威指南》一书中的第2章 &#xff0c;第2.3节&#xff0c;&#xff08;美&#xff09; Anton A. Chuvakin Kevin J. Schmidt Christopher Phillips 著 姚 军 简于涵 刘 晖 等译更多章节内容可以访问云栖社区“华章计算机”公众号查…

Python【01】【基础部分】- A

一、WHATS PYTHON ? 1、python 简介 Python&#xff08;英语发音&#xff1a;/ˈpaɪθən/&#xff09;, 是一种面向对象、解释型计算机程序设计语言&#xff0c;由Guido van Rossum于1989年发明&#xff0c;第一个公开发行版发行于1991年。Python是纯粹的自由软件&#xff0…

java的自增自减_Java中自增和自减操作符(++/--)的那些事

自增()和自减(--)运算符在JAVA语言中存在着很多运算符&#xff0c;但是在实际开发中我们或许很少用到它们&#xff0c;在初次学习中却时常出现它们的身影&#xff0c;对于这些运算符的含义和用法&#xff0c;是否还记得呢&#xff1f;1. 概述自增操作符()和自减操作符(--)是对变…

Finished yeah!

终于到了最后的博客阶段&#xff0c;这时候才知道博客此时此刻是多么的惬意&#xff0c;它成了书写心声的自由平台&#xff01;耗时一天完成这作业说起来也是蛮辛苦的&#xff0c;编译器需要新装&#xff0c;IDE需要熟悉&#xff0c;当然最主要的是之前浅入浅出的C功底在此次作…

《Python语言程序设计》——1.6 开始学习Python

本节书摘来自华章计算机《Python语言程序设计》一书中的第1章&#xff0c;第1.6节,作者&#xff1a;&#xff3b;美&#xff3d;梁勇&#xff08;Y. Daniel Liang&#xff09; 更多章节内容可以访问云栖社区“华章计算机”公众号查看。 1.6 开始学习Python 关键点&#xff1a;…

Tomcat性能调优

1、集成apache 虽然Tomcat也可以作web服务器&#xff0c;但是处理静态html的速度比不上apache&#xff0c;且其作为web服务器的功能远不如Apache&#xff0c;因此把apache和tomcat集成起来&#xff0c;讲html和jsp功能部分进行明确的分工&#xff0c;让tomcat只处理jsp部分&…

【转】sip中的subscribe和notify扩展应用技术

http://blog.csdn.net/hwz119/article/details/3965322转载于:https://www.cnblogs.com/matthew-2013/p/4917207.html