java

多线程第二种实现方式的好处是什么?

实现了Runnable接口,比如一个student类继承了Person类,又实现了runnable接口,Runnable仅仅是将线程任务进行了对象的封装。
Runnable r = new Student();
Thread t = new Thread(r);
实现Runnable接口的好处:
1,将线程的任务从线程的子类中分离出来,进行了单独的封装
按照面向对象的思想将任务封装成了对象
2,避免了java单继承的局限性。
所以创建线程的第二种方式较为常用。

    class Ticket implements Runnable{
    private int num = 100;
    Object obj = new Object();
    public void run(){
        while(true){
            synchronized (obj) {
                if(num > 0){
                /* 
                 * 这样实际上卖了400张票,为什么?实际上每个线程都操作了100张票。
                 *      用静态实现数据共享行不行?
                 *      多次启动一个线程是违法的
                 *      
                 *      线程安全问题产生的原因:
                 *          1,多个线程在同时操作共享数据
                 *          2,操作共享数据的代码有多条
                 *      这样就导致了线程的安全问题的产生。:
                 * 怎么解决?
                 * 将共享数据封装起来,当一个线程执行的时候,其他线程不能参与运算这些数据,
                 * 这个线程结束后,才能让其他的线程继续执行。
                 * 
                 * 关键字:synchronized
                 * 在java中,用同步代码块就可以解决这个问题。
                 * 
                 * synchronized(对象){//标记
                 *      需要被同步的代码块;
                 * }
                 * 
                 * 
                 * */
                    System.out.println(Thread.currentThread().getName()+"...." + num--);
                }
            }
        }
    }
}

public class TicketDemo {
    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);
//      Ticket t2 = new Ticket();
//      Ticket t3 = new Ticket();
//      Ticket t4 = new Ticket();

        t1.start();
        t2.start();
        t3.start();
        t4.start();
//      t1.start();
//      t2.start();
//      t3.start();
//      t4.start();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值