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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sss18310878521 中级黑马   /  2015-5-19 23:13  /  607 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

方式一:继承Thread
public class ThreadDemo extends Thread {
        public static Object obj=new Object();
       [b] //这里定义的对象必须是静态的,因为我们定义的锁只有一个,那么这个obj必须是ThreadDemo
     //对象都共用的
        public int num=100;
       
        public void run(){
                while(true){
                        synchronized(obj){  
                               //定义一个锁,在同一个时刻,只能让同一个线程进来
                               
                        if(num>0){
                                try {
                                        Thread.sleep(300);
                                } catch (InterruptedException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }
                                System.out.println(getName()+"正在卖票"+num--);
                        }
                }
        }
        }

方式二:实现Runnable接口


public class ThreadDemo implements Runnable {

         Object obj=new Object();
//由于ThreadDemo继承了Runnable,我们在main方法中调用的时候只需要建立一个ThreadDemo对象
//所以这次不需要再设置成static
         int num=100;
        public void run() {
                while(true){
                        synchronized(obj){
//和继承Thread一样,定义一个锁,在同一个时刻,只能让同一个线程进来
                               
                        if(num>0){
                                try {
                                        Thread.sleep(300);
                                } catch (InterruptedException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }
                                System.out.println(Thread.currentThread().getName()+"正在卖票"+num--);
                        }
                }

        }


注明:由于代码有点长,在这里main方法中的调用就不写了,只需要记住第一个建立三个ThreadDemo对象,第二个建立一个ThreadDemo对象,然后直接通过start()方法启动线程就可以了       
         
}
       

1 个回复

正序浏览
不错,顶一个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马