实现多线程的两类方法
1:Thread类:重写run方法
//用Thread实现多线程下载图片。
public class TDownload extends Thread{
private String url;
private String name;
public TDownload(String url, String name) {
super();
this.url = url;
this.name = name;
}
@Override
public void run() {
WebImg wd=new WebImg();
wd.download(url, name);
}
public static void main(String[] args) {
//创建一个线程,不需要等上一个线程结束才开始这个线程;
//创建一个对象 开启一个线程
new TDownload("图片网址", "保存地址").start();
new TDownload("图片网址", "保存地址").start();
}
}
//下载用commons-io下载网络图片
public class WebImg {
public void download(String url,String name){
try {
//调用commons工具包来联网保存图片
FileUtils.copyURLToFile(new URL(url),new File(name));
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("不合法的路径");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("图片下载失败");
}
}
}
2:Runnable接口:实现Runnable接口 重写Runnable中的run方法
(1):模拟12306抢票
public class Web12306 implements Runnable{
//票数 num是共享的
int num=100;
@Override
public void run() {
// 每个线程调用的都是一个对象,但是都是单独跑的run方法
while(true) {
if(num<0){
break;
}
//200毫秒延迟 一个线程延迟 可能 导致另外一个线程拿到 共享的 数据不准确
//Thread.sleep(200);
System.out.println(Thread.currentThread().getName()+"-->"+num--);
}
}
public static void main(String[] args) {
//一份资源
Web12306 wb=new Web12306();
//设置三个代理来抢票 来共享一个资源
new Thread(wb,"yang1").start();
new Thread(wb,"yang2").start();
new Thread(wb,"yang3").start();
}
}
(2):模拟龟兔赛跑
public class Recar implements Runnable{
//获胜者
public String winner;
//重写run方法
@Override
public void run() {
//每个线程调用的都是一个对象,但是都是单独跑的run方法
for(int steps=1;steps<=100;steps++) {
System.out.println(Thread.currentThread().getName()+"-->"+steps);
boolean flag=gameOver(steps);
if(flag) {
break;
}
}
}
private boolean gameOver(int steps) {
if(winner!=null) {
return true;
}else {
if(steps==100) {
winner=Thread.currentThread().getName();
System.out.println("winner-->"+winner);
return true;
}
}
return false;
}
public static void main(String[] args) {
Recar r=new Recar();
//将一个对象放到多个线程中
new Thread(r,"兔子").start();
new Thread(r,"乌龟").start();
}
}
“这是我第一次写文章,我刚刚简单的自学一点点多线程,一点点稍微的理解,可能还有哪些理解不对,希望各位大亨给予提点。
不负青春,不负过往,不就当下。
学习路上,任重而道远,还很艰辛,我会不断努力的。
谢谢支持。