b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

java多线程死锁面向对象语言的一个关键知识点就是线程,那么(2)

电脑杂谈  发布时间:2018-02-10 20:47:46  来源:网络整理

只有是Thread或者是Thread的子类才是线程 对象。

java多线程实现方式_java多线程死锁_java中object类的方法

问题2: 为什么要把Runnable实现类的对象作为实参传递给Thread对象呢?作用是什么?

作用就是把Runnable实现类的对象的run方法作为了线程的任务代码去执行了。

推荐使用: 第二种。 实现Runable接口的。

原因: 因为java单继承 ,多实现的。

Runnable如下实现:

public class Demo3 implements Runnable{

    @Override
    public void run() {
        /*System.out.println("this:"+ this);
        System.out.println("当前线程:"+ Thread.currentThread());*/
        for(int i = 0 ; i < 100 ; i++){
            System.out.println(Thread.currentThread().getName()+":"+i);
        }
    }

    public static void main(String[] args) {
        //创建Runnable实现类的对象
        Demo3 d = new Demo3();
        //创建Thread类的对象, 把Runnable实现类对象作为实参传递。
        Thread thread = new Thread(d,"狗娃");  //Thread类使用Target变量记录了d对象,
        //调用thread对象的start方法开启线程。
        thread.start();


        for(int i = 0 ; i < 100 ; i++){
            System.out.println(Thread.currentThread().getName()+":"+i);
        }

    } 

    /*
      Thread类 的run方法

     *  @Override
        public void run() {
            if (target != null) {
                target.run();  //就相当于Runnable实现类的对象的run方法作为了Thread对象的任务代码了。
            }
        }
    */
}

一个窗口售票的例子:

package cn.itcast.thread;

class SaleTicket implements Runnable{

    int  num = 50; // 票数

    @Override
    public void run() {
        while(true){
            synchronized ("锁") {
                if(num>0){
                    System.out.println(Thread.currentThread().getName()+"售出了第"+ num+"号票");
                    num--;
                }else{
                    System.out.println("售罄了..");
                    break;
                }   
            }
        }       
    }
}


public class Demo4 {

    public static void main(String[] args) {
        //创建了一个Runnable实现类的对象
        SaleTicket saleTicket = new SaleTicket();
        //创建三个线程对象模拟三个窗口
        Thread thread1 = new Thread(saleTicket,"窗口1");
        Thread thread2 = new Thread(saleTicket,"窗口2");
        Thread thread3 = new Thread(saleTicket,"窗口3");
        //开启线程售票
        thread1.start();
        thread2.start();
        thread3.start();


    }

}


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-70658-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    每日福利
    热点图片
    拼命载入中...