创建传统线程的方式

创建线程的两种传统方式

---》在Thread子类覆盖的run方法中编写运行代码

---》 在传递给Thread对象的Runnable对象的run方法中编写代码

---》总结:查看Thread对象的run方法的源代码,可以看到这两种方法都是在

        调用Thread对象的run方法,如果Thread类的run方法没有被覆盖,并且为该

        Thread对象设置了一个Runable对象,该run方法会调用Runnable对象的run

        方法

---》问题:如果在Thread子类覆盖的run方法中编写了运行代码,也为Thread子类对象传递

        了一个Runnable对象,那么,线程线程运行时的代码是子类的run方法的代码,还是Runnable

        对象的run方法的代码?

        涉及到的一个知识点,匿名内部类对象的构造方法如何调用父类的非默认构造方法。

---》多线程机制会提高程序的运行效率吗? 为什么会有多线程下载呢 ?


下面是代码的实现:

public static void main(String[]args) {

 //方式一

 Thread thread = new Thread() {

   @Override

   public void run () {

     while (true) {

    try{

   Thread.sleep(500);

} catch (InterruptedException e){

   e.printStackTrace() ;

 System.out.println(Thread.currentThread().getName());

}

}

thread.start();

//方式二:(留给读者自己去看源码为何这样实现)下面的Runnable表示线程所要执行的代码

 Thread thread2 = new Thread(new Runable(){

  @Override

   public void run () {

     while (true) {

    try{

   Thread.sleep(500);

} catch (InterruptedException e){

   e.printStackTrace() ;

 System.out.println(Thread.currentThread().getName());


});

}


thread2.start();

//方式三


 new Thread(new Runable(){

  @Override

   public void run () {

     while (true) {

    try{

   Thread.sleep(500);

} catch (InterruptedException e){

   e.printStackTrace() ;

 System.out.println("Runnable"+Thread.currentThread().getName());


})) {

   @Override

   public void run () {

     while (true) {

    try{

   Thread.sleep(500);

} catch (InterruptedException e){

   e.printStackTrace() ;

 System.out.println("Thread"+Thread.currentThread().getName());

}

}).start();

}


思考:方式三运行的代码是Runable的代码还是Thread的代码,答案是Thread中的代码

分析:首先是new 了一个Thread的子类,然后在Thread构造中创建了一个Runnable的方法,

            调用start()先去找的是new Thread()中的run方法,找自己的run方法,如果没找到用自己

            父类的方法,父类的方法会去找Runnable运行,子类的run方法把父类的run方法覆盖了

            所以以子类的方法为准,父类的全部都失效了.





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值