黑马程序员技术交流社区

标题: 线程中yield让步 [打印本页]

作者: 彭卫红    时间: 2014-8-28 00:55
标题: 线程中yield让步
  1. public class TextThreadYield { // 操作线程让步的类
  2.         private Vector vector = new Vector(); // 创建向量集合
  3.         // 创建日期格式
  4.         private DateFormat dateFormat = new SimpleDateFormat("HH-mm-ss:SSSS");
  5.         private boolean isFlag = false;

  6.         private class Yield extends Thread { // 让步接收文件类
  7.                 public Yield() {
  8.                         this.setName("接收文件"); // 设置线程名称
  9.                         this.setDaemon(true); // 如果SendFile线程结束,则该线程自动结束
  10.                 }

  11.                 public void run() {
  12.                         while (!isFlag) { // 标识为真进行循环
  13.                                 try {
  14.                                         Thread.sleep(100); // 休眠
  15.                                 } catch (InterruptedException e) { // 捕获唤醒异常
  16.                                         System.out.println("唤醒异常:" + e.getMessage());
  17.                                 }
  18.                                 if (vector.size() == 0) { // 判断向量集合大小
  19.                                         System.out.println(dateFormat.format(new Date())
  20.                                                         + "\t向量集合中没有文件,执行yield操作");
  21.                                         Thread.yield(); // 调用线程让步
  22.                                 } else { // 移队文件获得对象
  23.                                         String ss = (String) vector.remove(0);
  24.                                         System.out.println(dateFormat.format(new Date())
  25.                                                         + "\t取到文件,名为" + ss);
  26.                                 }
  27.                         }
  28.                 }
  29.         }

  30.         private class SendFile extends Thread { // 发送文件类
  31.                 private String[] files = new String[] { "新闻文件", "国内旅游向导", "山水名画欣赏",
  32.                                 "发家致富说明" };

  33.                 public SendFile() {
  34.                         this.setName("发送文件");
  35.                 }

  36.                 public void run() {
  37.                         try {
  38.                                 for (int i = 0; i < files.length; i++) { // 循环使线程休眠
  39.                                         Thread.sleep(201); // 线程休眠
  40.                                         vector.add(files[i]); // 添加文件
  41.                                 }
  42.                                 Thread.sleep(100); // 线程休眠
  43.                         } catch (InterruptedException e) { // 捕获唤醒异常
  44.                                 System.out.println("唤醒异常:" + e.getMessage());
  45.                         }
  46.                 }
  47.         }

  48.         public static void main(String[] args) { // java程序主入口处
  49.                 TextThreadYield text = new TextThreadYield();// 实例化对象
  50.                 text.new Yield().start(); // 实例对象启动线程
  51.                 text.new SendFile().start();
  52.         }
  53. }
复制代码

作者: 谢建平    时间: 2014-8-28 07:24
这个yield() 没什么大用吧 就让一下 下次照样抢
作者: dhgcy    时间: 2014-8-29 09:23
很详细   值得看一看




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2