多线程的互斥.pptVIP

  • 9
  • 0
  • 约1.05万字
  • 约 32页
  • 2018-01-08 发布于天津
  • 举报
多线程的互斥.ppt

小结 1. 实现线程有两种方法: 实现Ruannable接口 继承Thread类 2. 当新线程被启动时,Java运行系统调用该线程的run()方法,它是Thread的核心。 3. 线程有四个基本状态:创建、可运行、不可运行、死亡。 4. 两个或多个线程竞争资源时,需要用同步的方法协调资源。 5. 多个线程执行时,要用到同步方法,即使用synchronized的关键字设定同步区。 6. wait和notify起协调作用。 小结 第七章 多线程处理 线程的互斥 线程的同步 死锁问题 1. 用管道流实现线程间的通信 线程1 PipedOutputStream PipedInputStream 输出流outStream 输入流inStream 线程2 2. 通过一个中间类在线程间传递信息 线程2 线程1 中间类m s s m.write(s) s=m.read() write() read() 1、多线程的互斥 ——线程间的通信 例如:银行对同一个帐户的存取款操作。 1、多线程的互斥 ——线程间的数据共享 class Cq { private String name; private int value; void put(int i) { value=value+i;} int get(int i){ if (valuei) value=value-i; else { i=value; value=0; } return i; } int howmatch() { return value; } } class Fetch extends Thread{ private Cq a1; private int amount; public Fetch(Cq a1, int amount) { this.a1 = a1; this.amount = amount; } public void run() { int k = a1.howmatch(); try { sleep(1); } catch (InterruptedException e) { System.out.println(e); } System.out.println(现有 + k + ,取走 + a1.get(amount) + ,余额 + a1.howmatch()); } } class Save extends Thread{ private Cq a1; private int amount; public Save(Cq a1,int amount) { this.a1=a1; this.amount=amount; } public void run() { int k = a1.howmatch(); try { sleep(1); } catch (InterruptedException e) { System.out.println(e); } a1.put(amount); System.out.println(现有 + k + ,存入 + amount + ,余额 + a1.howmatch()); } } public static void main(String args[]) { Cq a1=new Cq(); Cq a2=new Cq(); (new Save(a1,100)).start(); (new Save(a1,200)).start(); (new Fetch(a1,500)).start(); (new Fetch(a2,500)).start(); } } 运行结果: 现有0,存入100,余额100 现有0,存入200,余额300 现有0,取走300,余额0 1、多线程的互斥 ——线程间的资源互斥共享 线程 1 线程 2 线程 10 资源 取过来 加1后送回去 取钱1 取钱2 透支 余额

文档评论(0)

1亿VIP精品文档

相关文档