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();//得到当前线程类,执行让步方法 } } } }
|

被折叠的 条评论
为什么被折叠?



