zoukankan      html  css  js  c++  java
  • Runnable和Thread的区别

    在java中实现多线程:

    1.Thread:继承Thread类,Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限。

    1)通过run()方法启动线程:此时结果很有规律,先第一个对象执行,然后第二个对象执行,并没有相互运行。

    class MyThread extends Thread{
      private String name;
      public MyThread(String name) {
        super();
        this.name = name;
      }
      public void run(){
        for(int i=0;i<10;i++){
          System.out.println("线程开始:"+this.name+",i="+i);
        }
      }
    }

    public class ThreadDemo01 {
      public static void main(String[] args) {
        MyThread mt1=new MyThread("线程a");
        MyThread mt2=new MyThread("线程b");
        mt1.run();
        mt2.run();
      }
    }

     2)调用start()方法,则会通过JVM找到run()方法。

    启动start()方法启动线程:程序可以正常完成交互式运行。

    public class ThreadDemo01 { 
      public static void main(String[] args) { 
        MyThread mt1=new MyThread("线程a"); 
        MyThread mt2=new MyThread("线程b"); 
        mt1.start(); 
        mt2.start(); 
      } 
    }

    2.Runnable接口:在实际开发中一个多线程的操作很少使用Thread类,而是通过Runnable接口完成。

    class MyThread implements Runnable{  
      private String name;  
      public MyThread(String name) {  
        this.name = name;  
      }
      public void run(){  
        for(int i=0;i<100;i++){  
          System.out.println("线程开始:"+this.name+",i="+i);  
        }  
      }  
    }; 

    在使用Runnable定义的子类中没有start()方法,只有Thread类中才有。可以通过Thread类来启动Runnable实现的多线程。(start()可以协调系统的资源):

    public class ThreadDemo01 {  
        public static void main(String[] args) {  
          MyThread mt1=new MyThread("线程a");  
          MyThread mt2=new MyThread("线程b");  
          new Thread(mt1).start();  
          new Thread(mt2).start();  
        }  
    } 

    3.区别和联系:在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处:

    • 避免点继承的局限,一个类可以继承多个接口。
    • 适合于资源的共享
  • 相关阅读:
    禁止页面被复制和禁止右键,一段样式一段JS就行了,无需复杂设定!
    你不知道的DIV+CSS的命名规则
    帝国cms提高网站网页打开速度的手段
    帝国cms网站管理系统之安全设置最优化分享
    渗透测试===使用BURPSUIT暴力破解某网站的手机验证码
    并发、并行、同步、异步、多线程的区别?
    python基础===一行 Python 代码实现并行(转)
    python目前安装的包备份
    jmeter,测登录,要不要过滤掉JS,CSS等请求?感觉过滤掉了压出来的数据就不真实?
    几个网站
  • 原文地址:https://www.cnblogs.com/jiktiv123/p/7718348.html
Copyright © 2011-2022 走看看