实现线程的方式:
1、继承Thread类,重写run方法,创建该类的对象并启动
class MyThread1 extends Thread {
MyThread1() {
}
//public Thread(String name)
MyThread1(String name) {
super(name);
}
@Override
public void run() {
//将来线程启动后需要执行的逻辑
for (int i = 1; i <= 200; i++) {
System.out.println(this.getName() + " - Hello word " + i);
}
}
}
public class ThreadDemo1 {
private static Object Thread;
public static void main(String[] args) {
//创建一个自己的线程对象
MyThread1 t1 = new MyThread1("小猪");
t1.setPriority(1);
System.out.println("t1: "+t1.getPriority());
MyThread1 t2 = new MyThread1();
t2.setName("小明");
t2.setPriority(5);
System.out.println("t2:"+t2.getPriority());
t1.start();
t2.start();
}
}
2、实现Runnable接口,实现run方法,借助Thread类创建线程对象并启动
public class MyRunnable1 implements Runnable{
@Override
public void run() {
//线程要执行的逻辑
for(int i=1;i<=200;i++){
//获取当前的线程对象
System.out.println(Thread.currentThread().getName() + " - "+i);
}
}
}
class RunnableDemo1{
public static void main(String[] args) {
MyRunnable1 myRunnable1 = new MyRunnable1();
//Thread(Runnable target, String name) 分配一个新的 Thread对象。并设置名字
Thread t1 = new Thread(myRunnable1,"朱总");
Thread t2 = new Thread(myRunnable1,"陈少");
Thread t3 = new Thread(myRunnable1,"徐帅");
t1.start();
t2.start();
t3.start();
}
}
实现接口方式的好处
(1)可以避免由于Java单继承带来的局限性。
(2)适合多个相同程序的代码去处理同一个资源的情况,把线程同程序的代码,数据有效分离,较好的体现了面向对象的设计思想。
3、实现Callable接口,实现call方法,借助线程池使用
好处:
可以有返回值
可以抛出异常
弊端:
代码比较复杂,所以一般不用