您的位置:首页 > 博客中心 > 编程语言 >

java 多线程基础学习,练习案例

时间:2022-03-29 01:51

一、多线程方法一(继承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();
}
}

技术图片

 

本类排行

今日推荐

热门手游