package com.thread.demo01;
//创建线程方式2: 实现runnable接口,重写run方法,执行线程需要丢入runnable接口的实现类,调用start方法
public class TestThread3 implements Runnable {
@Override
public void run(){for(int i = 0; i < 20; i++){
//run方法线程体
System.out.println("我在看代码---" + i);}}
public static void main(String[] args){
//main线程,主线程
//创建一个runnable接口的实现类对象
TestThread3 testThread3 = new TestThread3();
//创建线程对象,通过线程对象来开启我们的线程,代理
new Thread(testThread3).start();for(int i = 0; i < 200; i++){
System.out.println("我在学习多线程---" + i);}}}
线程的创建方式3 :实现callable接口
package com.thread.demo02;import org.apache.commons.io.FileUtils;import java.io.File;import java.io.IOException;import java.net.URL;import java.util.concurrent.*;
//线程的创建方式3 :实现callable接口
/*
callable的好处
1.可以定义返回值
2.可以抛出异常
*/
public class TestCallable implements Callable<Boolean>{
private String name;
private String url;
public TestCallable(String url, String name){
this.name = name;
this.url = url;}
@Override
public Boolean call(){
WebDownloader webDownloader = new WebDownloader();
webDownloader.downloader(url, name);
System.out.println("图片的名字为:" + name);returntrue;}
public static void main(String[] args) throws ExecutionException, InterruptedException {
TestCallable t1 = new TestCallable("http://bpic.588ku.com/element_origin_min_pic/16/10/29/2ac8e99273bc079e40a8dc079ca11b1f.jpg", "1.jpg");
TestCallable t2 = new TestCallable("http://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2021%2F0524%2F23d33360j00qtkixi0065c000qo0140c.jpg&thumbnail=650x2147483647&quality=80&type=jpg", "2.jpg");
TestCallable t3 = new TestCallable("http://img-arch.pconline.com.cn/images/upload/upc/tx/photoblog/1309/25/c49/26316176_26316176_1380092693834_mthumb.jpg", "3.jpg");
//创建执行服务
ExecutorService ser = Executors.newFixedThreadPool(3);
//提交执行
Future<Boolean> r1 = ser.submit(t1);
Future<Boolean> r2 = ser.submit(t2);
Future<Boolean> r3 = ser.submit(t3);
//获取结果
Boolean rs1 = r1.get();
Boolean rs2 = r2.get();
Boolean rs3 = r3.get();
System.out.println(rs1);
System.out.println(rs2);
System.out.println(rs3);
//关闭服务
ser.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异常,downloader方法出现问题");}}}