java实现多线程有三种方式:继承Thread类,重写run方法,启动使用start;实现runnable接口,重写run方法;实现callable接口,重写call方法(可以有返回值,也可以抛出异常)


1.多线程实现文件下载   利用FileUtils.copyURLtoFile()

package threadStudy;

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL; import org.apache.commons.io.FileUtils; public class WebDownload { public void download(String url,String dest) {
try {
FileUtils.copyURLToFile(new URL(url), new File(dest));
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("url is error!");
}
}
}
package threadStudy;

public class ThreadDownload extends Thread{

    String url;
String dest; public ThreadDownload(String url,String dest) {
this.url = url;
this.dest = dest;
} @Override
public void run() {
new WebDownload().download(url, dest);
System.out.println(dest);
} public static void main(String[] args) {
ThreadDownload t1 = new ThreadDownload("http://pic-bucket.ws.126.net/photo/0001/2019-06-06/EH0TSVI400AP0001NOS.jpg", "linzhiling.jpg");
ThreadDownload t2 = new ThreadDownload("http://pic-bucket.ws.126.net/photo/0001/2019-06-06/EH0TSVI500AP0001NOS.jpg", "linzhiling2.jpg");
ThreadDownload t3 = new ThreadDownload("http://pic-bucket.ws.126.net/photo/0001/2019-06-05/EGTO1O6800AN0001NOS.jpg", "rocket.jpg");
ThreadDownload t4 = new ThreadDownload("http://pic-bucket.ws.126.net/photo/0001/2019-06-05/EGTLGCTO00AN0001NOS.jpg", "rocket2.jpg"); t1.start();
t2.start();
t3.start();
t4.start(); } }

模拟抢票(同步问题以后解决)

package threadStudy;

public class Tickets implements Runnable {

    /**
* 使用runnable 实现线程 有利于共享资源
*/ private int ticketNumber = 100; @Override
public void run() {
while (true) {
if (ticketNumber <= 0) {
break;
} else {
try {
Thread.sleep(100); //模拟线程同步问题
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "----->" + ticketNumber--);
}
}
} public static void main(String[] args) {
Tickets t = new Tickets();
System.out.println(Thread.currentThread().getName());
new Thread(t,"黄牛一").start();
new Thread(t,"黄牛二").start();
new Thread(t,"黄牛三").start();
}
}

最新文章

  1. 记一次.NET代码重构
  2. 笔记:xubuntu下如何让系统默认使用nvidia显卡,而不是intel集显
  3. android nfc中Ndef格式的读写
  4. Could not parse mapping document from input stream
  5. UVa 490 - Rotating Sentences
  6. codeforces 719E E. Sasha and Array(线段树)
  7. mysql随机更新时间
  8. iOS常见问题(5)
  9. DevExpress ASP.NET 使用经验谈(8)-ASPxGridView自定义列和基本事件
  10. iPhone与iWatch连接、控制、数据传递(Swift)
  11. zookeeper-3.4.5安装&amp;3台机器安装之后 ./zkServer.sh status 之后会显示“Error contacting service. It is probably not running.”的解决办法
  12. JavaScript参考
  13. Tomcat多个项目部署,通过Nginx反向代理分别配置二级域名的流程
  14. 基于babylon3D模型研究3D骨骼动画(1)
  15. win10双系统安装卸载ubuntu
  16. bower 基础认识
  17. Keepalived配置文件详解
  18. 整理volatile相关知识点
  19. EOS的发币逻辑
  20. 对于jsp中编码的理解

热门文章

  1. [USACO16JAN]愤怒的奶牛Angry Cows
  2. bzoj1861 [Zjoi2006]Book 书架——splay
  3. hdu 2476 (string painter) ( 字符串刷子 区间DP)
  4. UVa 11401 Triangle Counting (计数DP)
  5. adb: command not found 解決方法(转载)
  6. bzoj 4195: [Noi2015]程序自动分析【并查集】
  7. React实战之将数据库返回的时间转换为几分钟前、几小时前、几天前的形式。
  8. Docker+Jenkins+Git发布SpringBoot应用
  9. 采购发票检验MIRO差异科目设置
  10. ROS学习笔记十:URDF详解