标签:继承 lse common 多线程下载 thread equal run trace stat
一、多线程方法一(继承Thread类)
package Demo01;
//继承线程类Thread
public class MyThread extends Thread{
//重写 run()方法
@Override
public void run() {
for (int i = 0; i < 20; i++) {
//多线程输出
System.out.println("我在学习多线程-----"+i);
}
}
//主线程main()方法
public static void main(String[] args) {
//实例化线程类
MyThread MyThread= new MyThread();
//调用 start() 实现多线程
MyThread.start();
//主线程输出
for (int i = 0; i < 300; i++) {
System.out.println("我在看书呢-------"+i);
}
}
}
二、多线程下载图片(继承Thread类)
package Demo01;
//引用FileUtils 包
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.net.URL;
//继承线程类Thread
public class TestThread extends Thread{
//定义两个参数 地址 名称
private String url;
private String name;
//构造函数
public TestThread(String url, String name) {
this.url = url;
this.name = name;
}
//run() 重写
@Override
public void run() {
//实例化下载类
WebDownLoader WebDownLoader=new WebDownLoader();
//调用下载方法
WebDownLoader.DownLoader(url,name);
//输出提醒下载
System.out.println("下载了图片"+name);
}
//main() 主方法
public static void main(String[] args) {
//实例化四个线程对象 参数 图片地址,保存名称
TestThread t1= new TestThread("http://124.160.103.218:1111/UpFile/20210628/Preject/8efbef.jpeg","工程图1.jpeg");
TestThread t2= new TestThread("http://124.160.103.218:1111/UpFile/20210628/Preject/79dbd8.jpeg","工程图2.jpeg");
TestThread t3= new TestThread("http://124.160.103.218:1111/UpFile/20210628/Preject/3d2d09.jpeg","工程图3.jpeg");
TestThread t4= new TestThread("http://124.160.103.218:1111/UpFile/20210628/Preject/5fdfb2.jpeg","工程图4.jpeg");
//调用start()启用多线程 下载图片
t1.start();
t2.start();
t3.start();
t4.start();
}
}
//定义下载图片类
class WebDownLoader{
//下载图片方法 url 地址 name 图片保存名
public void DownLoader(String url,String name){
//捕获异常
try {
//调用FileUtils包 的copyURLToFile() 方法 下载图片
FileUtils.copyURLToFile(new URL(url),new File(name));
} catch (IOException e) {
e.printStackTrace();
//输出异常
System.out.println("IOException 异常 DownLoader");
}
}
}
多线程下载完成!
三、多线程方法二(接口继承Runnable接口) 推荐使用
package Demo01;
//接口线程
public class TestThread1 implements Runnable {
//重写 run()方法
@Override
public void run() {
for (int i = 0; i < 20; i++) {
//多线程输出
System.out.println("我在学习多线程-----"+i);
}
}
//主线程 main()
public static void main(String[] args) {
//实例化线程接口
TestThread1 TestThread1= new TestThread1();
//实例化线程类
Thread Thread= new Thread(TestThread1);
//调用 start() 实现多线程
Thread.start();
//主方法线程
for (int i = 0; i < 200; i++) {
System.out.println("主线程===="+i);
}
}
}
四 接口多线程联系【龟兔赛跑】
package Demo01;
//线程接口Runnable
public class Race implements Runnable{
//定义胜利者
private String winer;
//重新run() 方法
@Override
public void run() {
//定义循环100米
for (int i = 0; i <= 100; i++) {
//定义兔子睡眠
if (Thread.currentThread().getName().equals("兔子") && i%20==0) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
System.out.println("InterruptedException,异常");
}
}
//接收是否完成比赛
boolean flage=gameOver(i);
if (flage)//完成
{
break;//退出
}
//输出比赛跑的步数
System.out.println(Thread.currentThread().getName()+"跑了》》》》》》"+i+"步");
}
}
//判断是否完成比赛
private boolean gameOver(int steps){
try {
//如果胜利者不为空,返回比赛
if (winer !=null) {
return true;
}
{
//判断传步数steps 是否大于或等于100 真胜利者winer 赋值
if (steps >=100) {
winer=Thread.currentThread().getName();
System.out.println(winer+"赢得了比赛!!!!!");
return true;
}
}
//否则,游戏继续
return false;
} finally {
}
}
//主函数 main()
public static void main(String[] args) {
//实例化接口类
Race Race=new Race();
//调用start()多线程执行操作
new Thread(Race,"乌龟").start();
new Thread(Race,"兔子").start();
}
}
标签:继承 lse common 多线程下载 thread equal run trace stat
原文地址:https://www.cnblogs.com/lwmwsh/p/14961179.html