A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Kevin.Kang   /  2015-9-2 11:14  /  2026 人查看  /  36 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文



  1. import java.util.Random;

  2. /*
  3. * 声明一个共享数组,起两个线程,
  4. *两个线程分别隔一段时间(可以写一个随机数),给数组中添加数据,
  5. *每一个线程为数组添加3个数据即可
  6. */
  7. public class Test04 {
  8.         public static void main(String[] args) {
  9.                 int[] in = new int[6]; // 需要控制因素
  10.                 ArrayAdd aa = new ArrayAdd(in); // 既然要共享资源,那么这里就只能创建一个线程执行地.
  11.                 for (int x = 0; x < 2; x++) {
  12.                         new Thread(aa).start(); // 创建多个线程.
  13.                 }
  14.         }
  15. }

  16. class ArrayAdd implements Runnable {
  17.         private int[] in; // 共享的资源,在创建时候,只能拥有一份.
  18.         private int num = 0;

  19.         ArrayAdd(int[] in) {
  20.                 this.in = in;
  21.         }

  22.         public void run() {
  23.                 while (num < in.length) {

  24.                         synchronized (in) {
  25.                                 if (num < in.length) {
  26.                                         try {
  27.                                                 Thread.sleep(500); // 线程只是等待一会时间,并没有释放锁.
  28.                                         } catch (InterruptedException e1) {
  29.                                                 e1.printStackTrace();
  30.                                         }
  31.                                         Random rd = new Random();
  32.                                         int i = rd.nextInt(20) + 1;
  33.                                         System.out.println(Thread.currentThread().getName() + "添加了:" + i);
  34.                                         in[num] = i;
  35.                                         num++;
  36.                                         try {
  37.                                                 in.wait(1000); // 放弃cup,放弃锁.让其他线程拿锁.
  38.                                         } catch (InterruptedException e) {
  39.                                                 e.printStackTrace();
  40.                                         }
  41.                                 } else {
  42.                                         break;
  43.                                 }
  44.                         }
  45.                 }
  46.         }
  47. }
复制代码



回复 使用道具 举报
  1. package threadTest;

  2. /*
  3. * 编写三各类Ticket、SealWindow、TicketSealCenter
  4. * 分别代表票信息、售票窗口、售票中心。售票中心分配一定数量的票,由若干个售票窗口进行出售,
  5. * 利用你所学的线程知识来模拟此售票过程。
  6. */
  7. public class Ticket {
  8.         private String name;
  9.         private int i;

  10.         public Ticket(String name, int i) {
  11.                 super();
  12.                 this.name = name;
  13.                 this.i = i;
  14.         }

  15.         public Ticket() {
  16.                 super();
  17.                 // TODO Auto-generated constructor stub
  18.         }

  19.         public String getName() {
  20.                 return name;
  21.         }

  22.         public void setName(String name) {
  23.                 this.name = name;
  24.         }

  25.         public int getI() {
  26.                 return i;
  27.         }

  28.         public void setI(int i) {
  29.                 this.i = i;
  30.         }

  31. }
复制代码
  1. package threadTest;

  2. public class TicketCenter {
  3.         private int num;

  4.         public TicketCenter() {
  5.                 super();
  6.                 // TODO Auto-generated constructor stub
  7.         }

  8.         public TicketCenter(int num) {
  9.                 super();
  10.                 this.num = num;
  11.         }

  12.         public int getNum() {
  13.                 return num;
  14.         }

  15.         public void setNum(int num) {
  16.                 this.num = num;
  17.         }

  18. }
复制代码
  1. package threadTest;

  2. public class TicketWindow implements Runnable {
  3.         private TicketCenter tc;
  4.         private Ticket t;
  5.         private int tickets;

  6.         public TicketWindow(Ticket t, TicketCenter tc) {
  7.                 super();
  8.                 this.tc = tc;
  9.                 this.t = t;
  10.                 tickets = tc.getNum();
  11.         }

  12.         @Override
  13.         public void run() {
  14.                 // TODO Auto-generated method stub
  15.                 while (true) {
  16.                         synchronized (this) {
  17.                                 if (tickets > 0) {
  18.                                         System.out.println(Thread.currentThread().getName() + "正在出售第" + (tickets--) + "张票");
  19.                                 }
  20.                         }
  21.                 }
  22.         }

  23. }
复制代码



回复 使用道具 举报
地狱里的帅灵魂 来自手机 中级黑马 2015-9-3 22:55:26
23#
Kevin.Kang 发表于 2015-9-3 22:44

楼主好帅气,总结这么多,有考试里面的题吗
回复 使用道具 举报
asinzuo 来自手机 中级黑马 2015-9-3 22:59:37
24#
Kevin.Kang 发表于 2015-9-2 13:04

这一题似乎不能用bos你用代码读中文试试
回复 使用道具 举报
多谢分享!
回复 使用道具 举报
zzq18217362451 来自手机 中级黑马 2015-9-4 00:15:53
26#
这是数组移除元素啊
回复 使用道具 举报
zzq18217362451 来自手机 中级黑马 2015-9-4 00:20:15
27#
第五题卡了,还是没看懂
回复 使用道具 举报
最好还是加上注释,好多看的费解
回复 使用道具 举报
收了,以后好好练习
回复 使用道具 举报
已收  谢谢分享
回复 使用道具 举报
多谢分享,可以借鉴学习。
回复 使用道具 举报
Zack 中级黑马 2015-9-12 15:07:18
32#
回复看题 学习一下
回复 使用道具 举报
哇哇 这个很屌
回复 使用道具 举报
额,貌似。。。。。。和谐了
回复 使用道具 举报
fjb0902 来自手机 中级黑马 2015-9-13 21:51:04
35#
值得收藏,
回复 使用道具 举报
楼主好厉害
回复 使用道具 举报

你的这个程序是指定目录下所有.txt文件拷贝到另一个目的中,并将扩展名改为.java吧
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马