两个线程同步操作缓冲区 : 线程缓冲 « 线 « Java 教程

En
Java 教程
1. 语言基础
2. 数据类型
3. 操作符
4. 流程控制
5. 类定义
6. 开发相关
7. 反射
8. 正则表达式
9. 集合
10. 线
11. 文件
12. 泛型
13. 本土化
14. Swing
15. Swing事件
16. 二维图形
17. SWT
18. SWT 二维图形
19. 网络
20. 数据库
21. Hibernate
22. JPA
23. JSP
24. JSTL
25. Servlet
26. Web服务SOA
27. EJB3
28. Spring
29. PDF
30. 电子邮件
31. 基于J2ME
32. J2EE应用
33. XML
34. 设计模式
35. 日志
36. 安全
37. Apache工具
38. 蚂蚁编译
39. JUnit单元测试
Java
Java 教程 » 线 » 线程缓冲 
10. 14. 1. 两个线程同步操作缓冲区
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class MainClass {
  public static void main(String[] args) {
    ExecutorService application = Executors.newFixedThreadPool(2);

    Buffer sharedLocation = new UnsynchronizedBuffer();

    System.out.println("Action\t\tValue\tProduced\tConsumed");
    System.out.println("------\t\t-----\t--------\t--------\n");

    try {
      application.execute(new Producer(sharedLocation));
      application.execute(new Consumer(sharedLocation));
    catch (Exception exception) {
      exception.printStackTrace();
    }

    application.shutdown()// terminate application when threads end
  // end main
}

interface Buffer {
  public void set(int value);

  public int get();
}

// UnsynchronizedBuffer represents a single shared integer.
class UnsynchronizedBuffer implements Buffer {
  private int buffer = -1// shared by producer and consumer threads

  public void set(int value) {
    System.out.printf("Producer writes\t%2d", value);
    buffer = value;
  }

  public int get() {
    System.out.printf("Consumer reads\t%2d", buffer);
    return buffer;
  }
}

class Producer implements Runnable {
  private Buffer buffer; // reference to shared object

  public Producer(Buffer shared) {
    buffer = shared;
  }
  public void run() {
    int sum = 0;

    for (int i = 1; i <= 10; i++) {
      try
      {
        Thread.sleep(1000);
        buffer.set(i);
        sum += i;
        System.out.printf("\t%2d\n", sum);
      catch (InterruptedException exception) {
        exception.printStackTrace();
      }
    }
    System.out.printf("\n%s\n%s\n""Producer done producing.""Terminating Producer.");
  }
}

class Consumer implements Runnable {
  private Buffer buffer;

  public Consumer(Buffer shared) {
    buffer = shared;
  }

  public void run() {
    int sum = 0;

    for (int i = 1; i <= 10; i++) {
      try {
        Thread.sleep(1000);
        sum += buffer.get();
        System.out.printf("\t\t\t%2d\n", sum);
      catch (InterruptedException exception) {
        exception.printStackTrace();
      }
    }
    System.out.printf("\n%s %d.\n%s\n""Consumer read values totaling", sum,
        "Terminating Consumer.");
  }
}
Action		Value	Produced	Consumed
------		-----	--------	--------

Producer writes	 1Consumer reads	-1	 1
			 1
Consumer reads	 1Producer writes	 2			 2
	 3
Consumer reads	 2			 4
Producer writes	 3	 6
Consumer reads	 3			 7
Producer writes	 4	10
Consumer reads	 4			11
Producer writes	 5	15
Consumer reads	 5			16
Producer writes	 6	21
10. 14. 线程缓冲
10. 14. 1. 两个线程同步操作缓冲区
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.