/*  内容:同步代码块,目的是解决多线程中的安全问题。什么安全问题呢??就是在执行run方法时,假如线程-0刚刚获得执行权,
*还没执行时,就挂那了,这时线程-1获得执行权,并进行执行,就有可能出现负数票的情况。
*原因:当一个线程执行run方法时,线程1操作共享数据时,失去了cpu执行权,导致线程2执行run方法,从而导致共享数据错误。
* 解决办法:给多线程所要执行的代码加上锁。当一个线程执行run方法时,锁上锁,即使失去CPU执行权,
*从而使其他线程不能执行run方法;
* synchronized(对象_){同步代码}:同步代码块,其中包含多线程共同执行的代码,此代码被同步.
* 其中的对象就像一个锁.即使执行同步代码的线程失去CPU执行权,其他线程也会被锁在外面不能执行同步代码
* 疑惑:obj对象??/毕老师当时没讲,只说了可以是任意对象,他直接调用的object上帝类建立了对象;
* 例子:火车中的厕所
* 同步前提:1,必须有两个或者两个以上的线程
* 2,这些线程必须是使用的同一个锁.(原因举例:3,4节车厢的厕所,不是同一个锁,线程1,线程2可以同时进入3,4节车厢的厕所,不能达到同步的目的.
*好出:解决了多线程的安全问题
*弊端:每次都得判断锁,浪费了资源.
*/
package ThreadDemoOne;
class TicketDemo implements Runnable
{
int ticket=1000;
Object obj =new Object();
public void run()
{
while(true)
{
synchronized(obj)//obj就是一个锁,这里的synchronized就是同步代码块.括起来的就是线程需要一次性执行完的代码.
{ if(ticket>0)
{
System.out.println(Thread.currentThread()+"号售票员"+"这是第"+this .ticket+"张票");
ticket--;
}
} }
}
}
public class ThreadDemo6
{
public static void main(String[] args )
{
TicketDemo t=new TicketDemo();
Thread t1=new Thread(t);
Thread t2=new Thread(t);
t1.start();
t2.start(); } }
/*运行结果摘取: Thread[Thread-1,5,main]号售票员这是第156张票
Thread[Thread-1,5,main]号售票员这是第155张票
Thread[Thread-1,5,main]号售票员这是第154张票
Thread[Thread-0,5,main]号售票员这是第153张票
Thread[Thread-0,5,main]号售票员这是第152张票 */

synchronized(){}同步代码块笔记(新手笔记,欢迎纠正)的更多相关文章

  1. 59、synchronized同步代码块

    synchronized同步方法的问题 有些情况下,在方法上面加synchronized同步,会有性能问题.请看下面代码,来计算下两个线程执行的耗时: package com.sutaoyu.Thre ...

  2. 线程同步 synchronized 同步代码块 同步方法 同步锁

    一 同步代码块 1.为了解决并发操作可能造成的异常,java的多线程支持引入了同步监视器来解决这个问题,使用同步监视器的通用方法就是同步代码块.其语法如下: synchronized(obj){ // ...

  3. java中的synchronized同步代码块和同步方法的区别

    下面这两段代码有什么区别? //下列两个方法有什么区别 public synchronized void method1(){} public void method2(){ synchronized ...

  4. 线程执行synchronized同步代码块时再次重入该锁过程中抛异常,是否会释放锁

    一个线程执行synchronized同步代码时,再次重入该锁过程中,如果抛出异常,会释放锁吗? 如果锁的计数器为1,抛出异常,会直接释放锁: 那如果锁的计数器为2,抛出异常,会直接释放锁吗? 来简单测 ...

  5. synchronized同步代码块锁释放

    今天发现自己写的线上程序出现数据库不能同步的问题,查看日志已经停止记录,随后使用jstack查看线程的运行状况,发现有个同步线程锁住了. 以下是jstack -l 637  问题线程的内容. &quo ...

  6. synchronized 同步代码块,售票问题

    package cn.ljs.FristSync; public class SalerDemo extends Thread { static int tickets = 1000; String ...

  7. java中多线程模拟(多生产,多消费,Lock实现同步锁,替代synchronized同步代码块)

    import java.util.concurrent.locks.*; class DuckMsg{ int size;//烤鸭的大小 String id;//烤鸭的厂家和标号 DuckMsg(){ ...

  8. Java:多线程,线程同步,synchronized关键字的用法(同步代码块、非静态同步方法、静态同步方法)

    关于线程的同步,可以使用synchronized关键字,或者是使用JDK 5中提供的java.util.concurrent.lock包中的Lock对象.本文探讨synchronized关键字. sy ...

  9. java多线程(三)——锁机制synchronized(同步语句块)

    用关键字synchronized声明方法在某些情况下是有弊端的,比如A线程调用同步方法之行一个长时间的任务,那么B线程必须等待比较长的时间,在这样的情况下可以使用synchronized同步语句快来解 ...

随机推荐

  1. 使用Eclipse、Tomcat遇到的一些问题

    Tomcat服务无法启动 前两天瞎搞,试着弄了弄Android的环境.结果不知道动了什么地方,Tomcat崩了,本地打开localhost:8080一直显示404,eclipse也无法使用Tomcat ...

  2. 步步为营-90-SEO(url重写+超链接技巧)

    目的:便于搜索引擎抓取 url重写:将带参数的url如:https://i.cnblogs.com/EditPosts.aspx?opt=1.修改为https://i.cnblogs.com/Edit ...

  3. python—命名规范

    文件名全小写,可使用下划线 包应该是简短的.小写的名字.如果下划线可以改善可读性可以加入.如mypackage. 模块与包的规范同.如mymodule. 类总是使用首字母大写单词串.如MyClass. ...

  4. WMSYS.WM_CONCAT返回CLOB类型的解决办法

    https://blog.csdn.net/cnm_csdn_wt/article/details/80047878

  5. OSGi HelloWorld

    1.创建项目 2.Debug Configurations,配好之后,可以点一下右下角的Validate Bundles验证一下是否有问题 3.Debug

  6. context日志

    class Program { static void Main(string[] args) { List<wolf_example> Listw; using (var ctx = n ...

  7. 【转】Android逆向入门流程

    原文:https://www.jianshu.com/p/71fb7ccc05ff 0.写在前面 本文是笔者自学笔记,以破解某目标apk的方式进行学习,中间辅以原理性知识,方便面试需求. 参考文章的原 ...

  8. URL地址编码和解码

    0. 参考 [整理]关于http(GET或POST)请求中的url地址的编码(encode)和解码(decode) python3中的urlopen对于中文url是如何处理的? 中文URL的编码问题 ...

  9. python全栈开发day51-jquery插件、@media媒体查询、移动端单位、Bootstrap框架

    一.昨日内容回顾 技术行业 (1)ajax技术 XMLHttpRequest() <1>创建XMLHttpRequest()对象 <2>检测状态(通过readyState的改变 ...

  10. Kudu Native RDD

    Spark与Kudu的集成同事提供了kudu RDD import org.apache.kudu.spark.kudu.KuduContext import org.apache.spark.{Sp ...