java多线程实现火车售票系统 以及java中的同步的实现 同步块 和同步方法同时 同步

简介:   /* 利用Java 多线程模拟火车站售票系统  了解java中的同步 class  Test {  public  static void main(String []args)  {      SellThread st=new SellThread(); //创建一个实现了implements接口的对象     new Thread(st).
 

/*
利用Java 多线程模拟火车站售票系统  了解java中的同步


class  Test
{
 public  static void main(String []args)
 { 
    SellThread st=new SellThread(); //创建一个实现了implements接口的对象
    new Thread(st).start();   //启动四个Thread
    new Thread(st).start();
    new Thread(st).start();
    new Thread(st).start(); 
 }
}
 
class SellThread   implements Runnable
{
   int index =100;
   public void run() 
  {  
      while(true)
      { 
         if(index>0) 
         {
         try
          {
         Thread.sleep(10);  //函数抛出异常我们要进行异常捕获 休眠之后 所有Thread等待在这里
          }
          catch(Exception e)
           {
           e.printStackTrace();
           }
         System.out.println(Thread.currentThread().getName()+"sell tickets "+ index--);    
         }
       }
  }  

}


*/

 

 

/*

上面的代码 不能保证同步 即每次只允许一个 THREAD访问 资源  我们要对这个临界区进行保护  
每个对象都有一个监视器 通过检测对象是否被枷锁 从而判断是否进入临界区 
同步快监视的是任意 对象  而同步方法监视的是 this 对象

有2种方法   1.同步块  2.同步方法    
1. synchronized( Object)
   { 
    ......  
 
   }
2.方法前面加上 synchronized修饰  

 

class  Test
{
 public  static void main(String []args)
 { 
    SellThread st=new SellThread(); //创建一个实现了implements接口的对象
    new Thread(st).start();   //启动四个Thread
    new Thread(st).start();
    new Thread(st).start();
    new Thread(st).start(); 
 }
}
 
class SellThread   implements Runnable
{
   int index =100;


*/
///////////////////////同步块   
     /*public void run() 
    {  
      while(true)
      { 
           synchronized(this)   //通过对象监视器枷锁每次只有一个线程进入临界区这个监视对象可以是任意
        {
           if(index>0) 
         {
         System.out.println(Thread.currentThread().getName()+"sell tickets "+ index--);    
         }
       }
    }
  } 
//////////////////////同步块   
   public void run() 
  {  
      while(true)
      { 
     
        sell();  //调用同步方法进行控制
      }
  }
  
/////////////////////////同步方法
  synchronized public void sell() 
  {  
          if(index>0) 
         {
         System.out.println(Thread.currentThread().getName()+"sell tickets "+ index--);    
         }
  }

///////////////////////同步方法
 
}


*/

 

///////////////////////同步快与同步方法实现同步 


class  Test
{
 public  static void main(String []args)   throws  Exception
  { 
    SellThread st=new SellThread(); //创建一个实现了implements接口的对象
    new Thread(st).start();   //启动四个Thread
    Thread.sleep(1);
    st.b=true ;  //
    new Thread(st).start();
 }
}
 
class SellThread   implements Runnable
{
   int index =100;
   boolean b=false;  //用来实现同步
   Object o=new Object(); //获得一个检测对象

///////////////////////同步块   
     public void run()  
   {  
     if(b==false)
      {
       while(true)
          {  
            synchronized(o)  //同步块可以监视任意对象但是   同步方法只能监视this 对象
            {                 
              if(index>0) 
                System.out.println("this  "+Thread.currentThread().getName()+"sell ticket "+index--);
            }
           }
       }
      else
     {
   while(true)
          if(index>0)
          {
          sell();
          }
    }
  }
/////////////////////////同步方法
  synchronized public  void sell() 
  {  
          if(index>0) 
         {
         System.out.println("this2  " +Thread.currentThread().getName()+"sell tickets "+ index--);    
         }
  }    

 
}

 

 

 

 

 

目录
相关文章
|
6天前
|
运维 Java
Java版HIS系统 云HIS系统 云HIS源码 结构简洁、代码规范易阅读
云HIS系统分为两个大的系统,一个是基层卫生健康云综合管理系统,另一个是基层卫生健康云业务系统。基层卫生健康云综合管理系统由运营商、开发商和监管机构使用,用来进行运营管理、运维管理和综合监管。基层卫生健康云业务系统由基层医院使用,用来支撑医院各类业务运转。
30 5
|
5天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
33 3
|
2天前
|
Java
Java 与垃圾回收有关的方法
Java 与垃圾回收有关的方法
|
2天前
|
存储 Java 测试技术
一文搞清楚Java中的方法、常量、变量、参数
在JVM的运转中,承载的是数据,而数据的一种变现形式就是“量”,量分为:**常量与变量**,我们在数学和物理学中已经接触过变量的概念了,在Java中的变量就是在程序运行过程中可以改变其值的量。
14 0
|
7天前
|
存储 Java
Java动态转发代理IP的实现方法
Java动态转发代理IP的实现方法
23 11
|
7天前
使用代理IP池实现多线程的方法
使用代理IP池实现多线程的方法
|
7天前
|
JavaScript Java 测试技术
基于Java的电影评论系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的电影评论系统的设计与实现(源码+lw+部署文档+讲解等)
24 0
|
7天前
|
JavaScript Java 测试技术
基于Java的实验室设备管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的实验室设备管理系统的设计与实现(源码+lw+部署文档+讲解等)
21 1
|
8天前
|
JavaScript Java 测试技术
基于Java的社区人员管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的社区人员管理系统的设计与实现(源码+lw+部署文档+讲解等)
26 2
|
8天前
|
JavaScript Java 测试技术
基于Java的公司员工工作日志办公系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的公司员工工作日志办公系统的设计与实现(源码+lw+部署文档+讲解等)
32 3

热门文章

最新文章