多线程的第一种启动方式:
1.自己定义一个类继承Thread
2.重写run方法
3.创建子类的对象,并启动线程
package text1;
public class MyThread extends Thread{
@Override
public void run() {
for(int i=0;i<100;i++){
System.out.println(getName()+"666");
}
}
}
package text1;
import java.util.ArrayList;
import java.util.List;
public class main {
public static void main(String[] args) {
MyThread mt1=new MyThread();
MyThread mt2=new MyThread();
mt1.setName("线程1:");
mt2.setName("线程2:");
mt1.start();
mt2.start();
}
}
多线程的第二种启动方式:
1.自己定义一个类实现Runnable接口
2.重写里面的run方法
3.创建自己的类的对象
4.创建一个Thread类的对象,并开启线程
package text;
public class myrun implements Runnable{
@Override
public void run() {
for(int i=1;i<=100;i++){
System.out.println(Thread.currentThread().getName()+"666");//注意和第一种的差别
}
}
}
package text;
public class main {
public static void main(String[] args) {
myrun r=new myrun();
Thread t1=new Thread(r);
Thread t2=new Thread(r);
t1.setName("线程1:");
t2.setName("线程2:");
t1.start();
t2.start();
}
}
多线程的第三种实现方式:
特点:可以获取到多线程运行的结果
1.创建一个类MyCallable实现Callable接口
2.重写call(是有返回值的,表示多线程运行的结果)
3.创建MyCallable的对象(表示多线程要执行的任务〉
4.创建FutureTask的对象(作用管理多线程运行的结果)
5.创建Thread类的对象,并启动(表示线程)
计算1+.....+100
package text2;
import java.util.concurrent.Callable;
public class MyCallable implements Callable <Integer>{
@Override
public Integer call() throws Exception {
int sum=0;
for(int i=1;i<=100;i++){
sum=sum+i;
}
return sum;
}
}
package text2;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class main {
public static void main(String[] args) throws ExecutionException, InterruptedException {
MyCallable mc=new MyCallable();
FutureTask<Integer> f=new FutureTask<>(mc);
Thread t=new Thread(f);
t.start();
Integer temp= f.get();
System.out.println(temp);
}
}