--------------siwuxie095
在Java中,线程的实现方式有 2 种:
(1)继承 Thread 类
(2)实现 Runnable 接口
Thread 类:
Thread 类是在 java.lang 包中定义的,继承 Thread 类必须重写 run() 方法
定义格式:
class className extends Thread{
run(){}
}
Runnable 接口:
Runnable 接口是在 java.lang 包中定义的,实现 Runnable 接口必须重写 run() 方法
定义格式:
class className implements Runnable{
run(){}
}
示例:
工程结构目录如下:
MyThread.java:
package com.siwuxie095.thread;
//MyThread是一个线程,继承自 Thread public class MyThread extends Thread {
private String name;
//构造方法,传入参数 name,用于标识当前线程 public MyThread(String name) { this.name=name; }
//重写父类 Thread 的 run() 方法 @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println(name+"-"+i);
} super.run(); }
} |
MyRunnable.java:
package com.siwuxie095.thread;
//MyRunnable 是一个线程,需要实现 Runnable 接口 public class MyRunnable implements Runnable {
private String name;
//构造方法,传入参数 name,用于标识当前线程 public MyRunnable(String name) { this.name=name; }
//复写接口中的抽象方法 run() public void run() { for (int i = 0; i < 10; i++) { System.out.println(name+"-"+i); } }
} |
ThreadDemo.java(主类):
package com.siwuxie095.thread;
public class ThreadDemo {
public static void main(String[] args) { //实例化线程对象 MyThread t1=new MyThread("A"); MyThread t2=new MyThread("B");
//线程的启动是通过 start()方法,而不是 run() 方法 //注意:只有 Thread 才有 start()方法 //多线程是一种并发机制,谁抢到CPU资源谁就执行 t1.start(); t2.start();
MyRunnable r1=new MyRunnable("C"); MyRunnable r2=new MyRunnable("D"); //很明显,Runnable是一个接口,没有 start() 方法, //(接口中只有全局常量和公共抽象方法,而 Runnable 接口中只有 run()抽象方法) // //但 Thread 有一个构造方法可以传入 Runnable 对象 //依然通过 Thread 的 start() 方法启动 Runnable 的线程 Thread t3=new Thread(r1); Thread t4=new Thread(r2); t3.start(); t4.start();
}
} |
运行一览:多线程的并发
【made by siwuxie095】