首页 > 编程语言 >java 线程的同步

java 线程的同步

时间:2023-02-23 13:59:09浏览次数:33  
标签:同步 java Thread int accountant 线程 public Bank

 

https://www.cnblogs.com/yihujiu

 

Example12_7.java

复制代码
public class Example12_7 {
   public static void main(String args[]) {
      Bank bank = new Bank();
      bank.setMoney(200);
      Thread accountant,    //会计
             cashier;      //出纳
      accountant = new Thread(bank);
      cashier = new Thread(bank);
      accountant.setName("会计");
      cashier.setName("出纳");
      accountant.start();
      cashier.start(); 
   }
}
复制代码

Bank.java

复制代码
public class Bank implements Runnable {
   int money=200;
   public void setMoney(int n) {
      money=n;
   }
   public void run() {
      if(Thread.currentThread().getName().equals("会计")) 
         saveOrTake(300);
      else if(Thread.currentThread().getName().equals("出纳"))
         saveOrTake(150);;
   }
    public synchronized void saveOrTake(int amount) { //存取方法
      if(Thread.currentThread().getName().equals("会计")) {
         for(int i=1;i<=3;i++) { 
             money=money+amount/3;      //每存入amount/3,稍歇一下
             System.out.println(Thread.currentThread().getName()+
                               "存入"+amount/3+",帐上有"+money+"万,休息一会再存");
             try { Thread.sleep(1000);  //这时出纳仍不能使用saveOrTake方法 
             }                       
             catch(InterruptedException e){}
         }
      }
      else if(Thread.currentThread().getName().equals("出纳")) {
         for(int i=1;i<=3;i++) { //出纳使用存取方法取出60
             money=money-amount/3;   //每取出amount/3,稍歇一下
             System.out.println(Thread.currentThread().getName()+
                               "取出"+amount/3+"帐上有"+money+"万,休息一会再取");
             try { Thread.sleep(1000);       //这时会计仍不能使用saveOrTake方法
             }                         
             catch(InterruptedException e){}
         }
      }
   }
}
复制代码

标签:同步,java,Thread,int,accountant,线程,public,Bank
From: https://www.cnblogs.com/kn-zheng/p/17147654.html

相关文章

  • JavaScript 标识符
    <!DOCTYPEhtml><html> <head> <metacharset="UTF-8"> <title></title> <scripttype="text/javascript"> /* *标识符 * -在JS中所有的可以由......
  • java 数据流
    Example10_11.javaimportjava.io.*;publicclassExample10_11{publicstaticvoidmain(Stringargs[]){Filefile=newFile("apple.txt");try......
  • JavaScript 编写位置
    <!DOCTYPEhtml><html> <head> <metacharset="UTF-8"> <title></title> <!-- 可以将js代码编写到外部js文件中,然后通过script标签引入 写到外部文件中可......
  • Javascript 基本语法
    <!DOCTYPEhtml><html> <head> <metacharset="UTF-8"> <title></title> <scripttype="text/javascript"> /* 多行注释 JS注释 多行注释,注......
  • JavaScript 字面量和变量
    <!DOCTYPEhtml><html> <head> <metacharset="UTF-8"> <title></title> <scripttype="text/javascript"> /* *字面量,都是一些不可改变的值 * ......
  • java 协调同步的线程
    Example12_8.javapublicclassExample12_8{publicstaticvoidmain(Stringargs[]){TicketHouseofficer=newTicketHouse();Threadzhangfe......
  • 【JavaScript】25_数组初步
    1、简介数组(Array)数组也是一种复合数据类型,在数组可以存储多个不同类型的数据数组中存储的是有序的数据,数组中的每个数据都有一个唯一的索引可以通过索引来操作获取数据数......
  • 多线程
    介绍获得线程号#include<pthread.h>pthread_tpthread_self(void);功能:得到线程id参数:无返回值:调用此函数的线程id创建线程#include<pthread.h>intpthrea......
  • Docker Desktop配合WSL和IDEA进行Java服务的打包+镜像构建+容器运行测试
    在Windows1022H2+的版本可以使用WSL(WindowsSubsystemforLinux或叫 WindowsSupportLinux)了,即Windows内置的Linux子系统!它对于在Windows下工作的容器化微服务开......
  • java 网络编程Socket编程
        Server.javaimportjava.io.*;importjava.net.*;publicclassServer{publicstaticvoidmain(Stringargs[]){String[]answer={......