多线程方式

1、  实现多线程有两种方式:

继承 java.lang.Thread 类,重写父类的run()方法;

实现 java.lang.Runnable,实现接口的run()方法;

注意:线程启动一定是  线程对象.start()方法

Thread类方法:

package com.eduask.test;

//继承Thread类,让MyThread类成为一个线程类

public class MyThread extends Thread {

    public void run(){

       for(inti=1;i<=100;i++){

           //getName()得到当前线程的名字

           System.out.println("线程:"+getName()+"正在打印:"+i);

       }

    }

}

 

package com.eduask.test;

//测试方法

public class MyThreadMain {

    public static void main(String[] args) {

       //创建线程

       MyThread mt = new MyThread();

       //在启动线程的时候,不是直接调用线程的run()方法,如果直接调用,只是单纯的方法调用,并没有启动线程

       //启动线程一定   线程对象.start();

       mt.setName("小强");//给线程设置名字

       mt.start();

       MyThread mt1 =new MyThread();

       mt1.setName("小花");

       mt.start();

       for(inti =1;i<=100;i++){

           //Thread.currentThread() 得到当前线程对象

           System.out.println("线程:"+Thread.currentThread().getName()+"正在打印:"+i);

       }

    }

}

 

 

 

package com.eduask.test;

//实现runnable接口,  Myrunnable多线程目标类

public class MyRunnable implements Runnable {

    int i = 100;

    public void run() {

       for(;i>0;i--){

           System.out.println("线程:"+Thread.currentThread().getName()+"正在打印:"+i);

       }

    }

}

package com.eduask.test;

public class MyRunnableMain {

   public static void main(String[] args) {

      // TODO Auto-generated method stub

      //创建多线程目标类

      MyRunnable mr = new MyRunnable();

      //创建多线程类,把线程目标类传入其中

      Thread t1 = new Thread(mr);

      t1.start();//启动线程

      //两个线程类,传入的目标类是一个

      Thread t2 = new Thread(mr);

      t2.start();

   }

}

Runnable 接口与 Thread 类之间的区别

Runnable 接口必须实现 run 方法,而 Thread 类中的run 方法是一个空方法,可以不重写

Runnable 接口的实现类并不是真正的线程类,只是线程运行的目标类。要想以线程的方式执行 run 方法,必须依靠 Thread 类

Runnable 接口适合于资源的共享

 

2、  线程的生命周期

package com.eduask.test;

 

public class MyRunnablePriority implements Runnable {

 

   public static void main(String[] args) {

      //创建线程运行目标类

      MyRunnablePriority mrp  =new MyRunnablePriority();

       //线程新建状态

      Thread t1 = new Thread(mrp);

     

      //执行start()方法  线程才是就绪状态

      t1.start();

 

       //JVM调度CPU时间碎片,抢到了,  线程运行状态

   }

 

   public void run() {

      // 线程的run方法,执行完成之后,死亡状态

      for(inti=1;i<=10;i++){

         System.out.println("线程:"+Thread.currentThread().getName()+"打印:"+i);

      }

   }

 

}

 

 

 

线程让步:当某个线程调用yiled让步方法,只是让出这个线程的本次运行权利,但是会重新参与到新一轮的争夺当中。

package com.eduask.test;

 

public class MyRunnableYiled implements Runnable {

    public static void main(String[] args) {

       MyRunnableYiled mr = new MyRunnableYiled();

       Thread t1 = new Thread(mr);

       Thread t2 = new Thread(mr);

       Thread t3 = new Thread(mr);

      

       t1.start();

       t2.start();

       t3.start();

    }

 

    @Override

    public void run() {

       for(inti =1;i<=20;i++){

           System.out.println("线程:"+Thread.currentThread().getName()+"打印:"+i);

           if(i%5==0){

              System.out.println(Thread.currentThread().getName()+"线程让步");

              Thread.currentThread().yield();//得到当前线程类,执行让步方法

           }

       }

    }

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值