(1)继承Thread类,重写run方法,调用start方法,启动线程进入就绪状态。
public class ThreadDemo01 {
public static void main(String[] args) {
//创建线程对象,启动任务
Thread t1 = new MyTask();
Thread t2 = new MyTask();
t1.start();
t2.start();
System.out.println("main方法over");
}
}
/**方法一、通过继承Thread,完成线程定义*/
class MyTask extends Thread{
//重写run方法
@Override
public void run() {
for(int i=0;i<1000;i++) {
System.out.println(this.getName()+":"+1);
}
}
}
(2)实现Runnable接口,重写run方法,传给Thread对象,由Thread对象调用start方法启动线程。
public class ThreadDemo02 {
public static void main(String[] args) {
Runnable r1 = new MyTask1();
Thread t1 = new Thread(r1);
Runnable r2 = new MyTask1();
Thread t2 = new Thread(r2);
t1.start();
t2.start();
System.out.println("main方法结束");
}
}
/**方法二:实现接口,完成任务的定义*/
class MyTask1 implements Runnable{
//重写run方法,定义任务内容
@Override
public void run() {
int num = (int)(Math.random()*100);
for(int i=0;i<500;i++) {
System.out.println("SweeneyIsMine"+num);
}
}
}
(3)创建Callable的子类对象,重写call方法(有返回值,返回值类型为泛型类型),传给FutureTask对象(有泛型),将FutureTask对象传给Thread对象,由Thread对象调用start方法,启动线程。
public class ThreadDemo04 {
public static void main(String[] args) {
FutureTask<String> task = new FutureTask<String>(new Callable<String>() {
public String call() throws Exception{
//call方法返回值就是泛型类型
int count = 0;
for(int i=0;i<100;i++) {
if(i%2!=0) {
count+=i;
}
}
System.out.println("count");
return count+"";
}
});
Thread t1 = new Thread(task);
t1.start();
}
}