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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

ljz945a

中级黑马

  • 黑马币:-37

  • 帖子:80

  • 精华:0

© ljz945a 中级黑马   /  2016-4-12 23:32  /  468 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package com.heima.Test;

import java.util.Random;

public class Test5 {

        /**
         * 1.创建一个长度为6的数字;
         * 2.创建线程1往数组添加一个元素
         * 3.创建线程2往数组添加一个元素
         * 4.加入等待唤醒机制
         * 5.元素添加完毕,输出数组
         */
        public static void main(String[] args) {
                final Printer p = new Printer();
               
                new Thread() {
                        public void run() {
                                this.setName("线程一");
                                while(true) {
                                        try {
                                                p.print1();
                                                if (Printer.i==5) {
                                                        System.out.println("数组输入完成");
                                                        StringBuilder sb = new StringBuilder("[");
                                                        for(int i = 0; i<p.arr.length; i++) {
                                                                if(i != p.arr.length-1) {
                                                                        sb.append(p.arr[i]);
                                                                        sb.append(", ");
                                                                } else {
                                                                        sb.append(p.arr[i]);
                                                                        sb.append(']');
                                                                }
                                                        }
                                                        System.out.println(sb);
                                                        break;
                                                }
                                               
                                        } catch (InterruptedException e) {
                                               
                                                e.printStackTrace();
                                        }
                                }
                        }
                }.start();
               
                new Thread() {
                        public void run() {
                                this.setName("线程二");
                                while(true) {
                                        try {
                                                p.print2();
                                        if (Printer.i==5) {
                                                break;
                                        }
                                               
                                        } catch (InterruptedException e) {
                                               
                                                e.printStackTrace();
                                        }
                                }
                        }
                }.start();
               
               
        }
}
class Printer {
        private int flag = 1;
        static int[] arr = new int[6];
        static int i=0;
        public void print1() throws InterruptedException {                                                       
                synchronized(this) {
                        if(flag != 1) {
                                this.wait();                                       
                        }
                        Random r = new Random();
                        arr[i]=r.nextInt(20);
                        System.out.println(Thread.currentThread().getName()+"往数组里存入了"+arr[i]);
                        i++;
                        flag = 2;
                        this.notify();                                               
                }
        }
       
        public void print2() throws InterruptedException {
                synchronized(this) {
                        if(flag != 2) {
                                this.wait();
                        }
                        Random r = new Random();
                        arr[i]=r.nextInt(20);
                        System.out.println(Thread.currentThread().getName()+"往数组里存入了"+arr[i]);
                        i++;
                        flag = 1;
                        this.notify();
                }
        }
}

线程二老是在后面跳来跳去的!

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马