1.继承Thread方法
2.实现Runnable接口
好处(避免单继承局限性,灵活方便,方便同一个对象被多个线程使用)
3.实现Callable接口
先看Thread方法
3.实现Callable接口 先看Thread方法
1.1继承Thread方法并重写run方法
public class Main extends Thread{
@Override
public void run() {
}
}
1.2使用.start()开启线程
Main main= new Main();
//开启线程
main.start();
第二种方法实现runnable接口
和Thread差不多是一样的
2.1首先实现runnable接口并重写run方法
public class Thread2 implements Runnable{
@Override
public void run() {
}
}
2.2开启线程
和Thread方法不太一样
这里写了一个简单的方法运行线程,看一下代码
package com.company;
//Runnable
public class Thread2 implements Runnable{
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println("写代码"+i);
}
}
public static void main(String[] args) {
Thread2 thread2=new Thread2();
// Thread thread=new Thread(thread2);
// thread.start();
//上变两个可以简写为下边这个
new Thread(thread2).start();
for (int i = 0; i < 20; i++) {
System.out.println("听讲"+i);
}
}
}
所以启动线程要newTread(目标对象)+Thread.start()开启
3.1实现callable接口(下边有例子)5.1实现Callable接口,需要返回值类型
5.2重写call方法,需要抛出异常
5.3创建目标对象
5.4创建执行服务:
ExecutorService service= Executors.newFixedThreadPool(1);(开启一个服务)
5.5提交执行:
Future
5.6获取结果
boolean res1=r1.get();
5.7关闭服务
service.shutdown();
这里使用下载图片的案例做创建线程
package deom1; import com.company.Thread1; import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.concurrent.*; public class Thread4 implements Callable{ private String url; //网络图片保存地址 private String name;//保存名字 //构造器 public Thread4(String url,String name) { this.name=name; this.url=url; } //重写call方法 @Override public Boolean call() { WebDownloader webDownloader=new WebDownloader(); webDownloader.downLoader(url,name); System.out.println("下载了+"+name); return true; } //创建三个线程同时下载三个图片 public static void main(String[] args) throws ExecutionException, InterruptedException { Thread4 t1=new Thread4("https://img-blog.csdnimg.cn/20201122165156822.png#pic_center","5.jpg"); Thread4 t2=new Thread4("https://img-blog.csdnimg.cn/20201122165156822.png#pic_center","7.jpg"); Thread4 t3=new Thread4("https://img-blog.csdnimg.cn/20201122165156822.png#pic_center","9.jpg"); //创建服务 ExecutorService service= Executors.newFixedThreadPool(3); //提交执行 Future r1=service.submit(t1); Future r2=service.submit(t2); Future r3=service.submit(t3); //获取结果 boolean res1=r1.get(); boolean res2=r2.get(); boolean res3=r3.get(); //关闭服务 service.shutdown(); } } class WebDownloader { public void downLoader(String url, String name) { try { FileUtils.copyURLToFile(new URL(url), new File(name)); } catch (IOException e) { e.printStackTrace(); System.out.println("IO异常,方法出问题"); } } }
callable方法不经常用,所以了解即可



