黑马程序员技术交流社区

标题: 多线程面试例题 [打印本页]

作者: sjw12025    时间: 2016-6-15 23:06
标题: 多线程面试例题
多线程:
package cn.itheima.thread;
/*
* 1.多线程实现,输出线程自己的名字,并阻塞300毫秒,共输出20次
*/
public class Test1 {
        public static void main(String[] args) {
                Thread t=new Thread(new Runnable() {
                        @Override
                        public void run() {
                                for(int i=0;i<20;i++){
                                        System.out.println(Thread.currentThread().getName()+":"+i);
                                        try {
                                                Thread.sleep(300);
                                        } catch (InterruptedException e) {
                                                e.printStackTrace();
                                        }
                                }
                        }
                });
                t.start();
        }
}

package cn.itheima.thread;
/*
* 2.定义一个类实现Runnable接口,卖票100张,四个线程,输出格式为“Thread-1,还剩10张票”
*/
public class Test2 {
        public static void main(String[] args) {
                Ticket t=new Ticket();
                Thread t1=new Thread(t);
                Thread t2=new Thread(t);
                Thread t3=new Thread(t);
                Thread t4=new Thread(t);
                t1.start();
                t2.start();
                t3.start();
                t4.start();
        }
}

package cn.itheima.thread;
public class Ticket implements Runnable{
        private static int ticket=100;
        private boolean flag=true;
        @Override
        public void run() {
                if (flag) {
                        while(true){
                                synchronized (Ticket.class) {
                                        if (ticket>0) {
                                                System.out.println(Thread.currentThread().getName()+":"+ticket--);
                                        }       
                                }
                        }
                }else {
                        while(true){
                        this.show();
                        }
                }       
        }
        private synchronized void show() {       
                if (ticket>0) {
                        System.out.println(Thread.currentThread().getName()+":"+ticket--);
                }
        }
}
package cn.itheima.thread;
/*
* 3.编写三个类 Tocket  、 SealWindow  TickerSealCener 分别代表票信息、售票窗口
        售票中心。售票中心分配一定数量的票,由若干个窗口进行出售。来模拟卖票
*/
public class TesTickerSealCenert {
        public static void main(String[] args) {
                SealWindow sell=new SealWindow();
                Thread t1=new Thread(sell);
                Thread t3=new Thread(sell);
                Thread t2=new Thread(sell);
                t1.start();
                t3.start();
                t2.start();
        }
package cn.itheima.thread;
public class Tocket {
        private static int ticket=100;
        public static void show(){
                if (ticket>0) {
                        System.out.println(Thread.currentThread().getName()+":"+ticket--);
                }
        }
}
package cn.itheima.thread;
public class SealWindow implements Runnable{
        private boolean flag=true;
        @Override
        public void run() {
                if (flag) {
                        while(true){
                                synchronized (Tocket.class) {
                                        Tocket.show();
                                }
                        }
                }
        }
}



作者: 守徒徒    时间: 2016-6-16 08:49
学习了!!
作者: haward2015    时间: 2016-6-16 09:05
厉害,。,。、
作者: sasyun    时间: 2016-6-16 13:56
感谢分享
作者: 1499744937    时间: 2016-6-16 15:31
学习了,非常不错
作者: cmh19941129    时间: 2016-6-16 18:39
能加个注释吗?
作者: tianzhu2725    时间: 2016-6-16 19:29
谢谢分享 总感觉代码一天不看或者不敲就快忘了
作者: 644313561    时间: 2016-6-16 22:44
学习了,写的很好!
作者: 一个大西瓜    时间: 2016-6-16 22:49
谢谢分享




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