这里是关于多线程的实现的代码:
Thread:
public class threadtest extends Thread {
@Override
public void run(){
//继承Thread 重写run方法
System.out.println(getName()+"你好");
}
}
测试一下:
public class test {
public static void main(String[] args) {
//继承Thread 重写run方法
threadtest t1=new threadtest();
//创建线程
t1.start();
//开启线程
t1.setName("线程1");
threadtest t2=new threadtest();
t2.start();
t2.setName("线程2");
}
}
j
Runnable方法:
public class myrunnable implements Runnable{
@Override
public void run() {
//实现接口 重写方法
for (int i = 0; i < 10; i++) {
Thread tt = Thread.currentThread();
System.out.println(tt.getName()+"你好");
}
}
}
测试一下:
public class myrunabletest {
public static void main(String[] args) {
myrunnable m1=new myrunnable();
//先去是实现接口Runnable 创建任务
Thread t1=new Thread(m1);
//创建线程 执行任务
Thread t2=new Thread(m1);
t1.setName("线程1");
t2.setName("线程2");
//设置线程的名字
t1.start();
t2.start();
//开启线程
}
}
下面Callable 以及future
import java.util.concurrent.Callable;
public class mycallable implements Callable<String>
//实现接口 并且指定泛型
{
@Override
public String call() throws Exception {
for (int i = 0; i < 10; i++) {
System.out.println("测试111");
}
return null;
}
}
测试一下:
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class mycallabletext {
public static void main(String[] args) throws ExecutionException, InterruptedException {
mycallable m1=new mycallable();
//创建任务
FutureTask <String> f1=new FutureTask<>(m1);
//获取任务的结果
Thread t1=new Thread(f1);
//创建线程
t1.start();
//开启线程
String s = f1.get();
System.out.println(s);
//返回结果
}
}
这几种方式的不同 优缺点也不同 在上面的思维导图中标注了 这里不过多解释 可以直接看注释