多线程两种实现区别-继承Thread和实现Runable

    xiaoxiao2021-12-14  18

    一  前面一种比较简洁。后面一种更灵活,因为java可以实现多个接口,但是只能继承一个类 二  适合于资源的共享 如果不涉及 多线程直接资源共享用Thread 比较好,否则实现Runable较好 Thread其实也是实现了Runnable接口  Thread中的start()方法的定i,可以发现此方法中使用了private native void start0() 一种是继承Thread 这种类可以直接调用运行  见:ExtendThread ExtendThread extends Thread ExtendThread.start() 实现Runable                  见:RunnableThread RunnableThread et=new RunnableThread("yang"); Thread th=new Thread(et); th.start(); ExtendThread package thread.test; // public class ExtendThread extends Thread { private String name; public ExtendThread(String name ){     this.name=name; } public static void main(String[] args) { ExtendThread et=new ExtendThread("yang"); ExtendThread et2=new ExtendThread("ll");         et.start();         et2.start();         int i=0;         while(i++<100)         {             System.out.println("线程活着没"+et.isAlive());                     }             }     public void run(){         for(int i = 0;i<10 ;i++){             System.out.println("运行的线程为:"+this.name);         }         System.out.println("我结束了哦");     } } package thread.test; public class RunnableThread implements Runnable { private String name; public RunnableThread(String name) { this.name = name; } @Override public void run() { // TODO Auto-generated method stub for (int i = 0; i < 10; i++) { System.out.println("运行的线程为:" + this.name); } System.out.println("我结束了哦"); } public static void main(String[] args) { RunnableThread et=new RunnableThread("yang"); RunnableThread et2=new RunnableThread("ll"); //分配新的Thread对象 Thread th=new Thread(et); Thread th2=new Thread(et2); th.start(); th2.start(); int i = 0; // while (i++ < 100) { // System.out.println("线程活着没" + th.isAlive()); // // } } } 资源共享的例子: 要加上synchronized 进行锁定,否则有多余数据出现 package thread.test; //本例子用于演示如何共享 public class RunableThread2 implements Runnable { private Integer ticket=1000; private String name;      public RunableThread2(String name ){          this.name=name;      }  @Override public void run() { // TODO Auto-generated method stub synchronized(this){ while (ticket>0) { System.out.println("运行的线程为:" + this.name+"票:"+(ticket--)); } } } /** * @param args * @CreateDate:2014-3-3 * @author yangll */ public static void main(String[] args) { // TODO Auto-generated method stub RunableThread2 et=new RunableThread2("yang"); Thread th=new Thread(et); Thread th2=new Thread(et); th.start(); th2.start(); } }
    转载请注明原文地址: https://ju.6miu.com/read-965204.html

    最新回复(0)