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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 白粥做底 初级黑马   /  2015-10-31 23:11  /  970 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

编写程序,循环接收用户从键盘输入多个字符串,
* 直到输入“end”时循环结束,并将所有已输入的字符串按字典顺序倒序打印。

4 个回复

倒序浏览
总结:                 1.共享的数据只能一份,那么在创建这个共享数据对象时候,就只能有一个对象.                 2.实现了Runnable的类,只是一个协商提供线程运行的执行地.                 3.共享数据是实实在在的,而线程是虚拟的.                 4.wait和sleep的用法.wait是Object中的方法,使当前线程放弃cup执行权.同时可以等待时间...而sleep是Thread中的方法,使线程等待一段时间,但是线程并没有释放cup使用权.         思考:                 1.线程之所以要实现Runnable而不继承Thread,是因为继承只支持单继承,限制了类的扩展性.                 2.线程是一个虚拟的事物.这个虚拟的事物通过协议的执行地(run()方法)在这个区域执行线程所需要执行的数据.如何保证执行同一个资源呢?就是对于执行地只需求存放一份.如果通过创建两个ArrayAdd,那么这就是两个执行地.应该注意一下.                 3.对于wait和sleep的用法.应该特别注意一下.如果我们想要让该线程放弃cup执行权(放弃锁),那么就可以使用wait来控制,如果只是让线程等待一段时间,那么就使用sleep()来操作.                   * */ public class Demo21 {         public static void main(String[] args) {                 int[] in = new int[6]; //需要控制因素                 ArrayAdd aa = new ArrayAdd(in);  //既然要共享资源,那么这里就只能创建一个线程执行地.                 for(int x = 0; x < 2; x ++)                 {                         new Thread(aa).start(); //创建多个线程.                 }         } } class ArrayAdd implements Runnable {         private int[] in;  //共享的资源,在创建时候,只能拥有一份.         private int num = 0;         ArrayAdd(int[] in)         {                 this.in = in;         }         public void run()         {                 while(num < in.length)                 {                                          synchronized(in)                         {                                 if(num < in.length)                                 {                                         try {                                                 Thread.sleep(500); //线程只是等待一会时间,并没有释放锁.                                         } catch (InterruptedException e1) {                                                 e1.printStackTrace();                                         }                                         Random rd = new Random();                                         int i = rd.nextInt(20) + 1;                                         System.out.println(Thread.currentThread().getName() + "添加了:" + i);                                         in[num] = i;                                         num ++;                                         try {                                                 in.wait(1000);  //放弃cup,放弃锁.让其他线程拿锁.                                         } catch (InterruptedException e) {                                                 e.printStackTrace();                                         }                                 }                                 else                                 {                                         break;                                 }                         }                 }         } }

评分

参与人数 1黑马币 +12 收起 理由
白粥做底 + 12

查看全部评分

回复 使用道具 举报 1 0
/*
* 循环从键盘接受的输入的多个字符,知道输入“end”时循环结束,并将所有输入的字符串按字典倒序打印。
*/
public class test01 {

        public static void main(String[] args) {
                ArrayList<String> arr = new ArrayList<String>();// 创建容器
                Scanner scanner = new Scanner(System.in);// 创建键盘扫描
                while (scanner.hasNext()) {
                        String s = scanner.next();
                        if (s.equals("end"))// 判断输入的字符串等于end退出循环
                                break;
                        arr.add(s);// 不等于,添加到容器
                }
                Collections.sort(arr); // 排序,从小到大
                Collections.reverse(arr);// 强行逆序
                for (String s : arr)// 便利
                        System.out.println(s);
        }
}
回复 使用道具 举报 1 0
很简单的题目。楼上正解!
二楼写的是什么,表示没看懂。。。楼主好牛,居然看得懂,不过被版主看到。黑马币要被扣。。。你用小号刷黑马币也太明显了。。建议你去看看圣尊发的版规!
回复 使用道具 举报
一顿乱搞啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马