java线程学习1
2024-08-30 08:06:43
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();
}
}
最新文章
- 记一次.NET代码重构
- 笔记:xubuntu下如何让系统默认使用nvidia显卡,而不是intel集显
- android nfc中Ndef格式的读写
- Could not parse mapping document from input stream
- UVa 490 - Rotating Sentences
- codeforces 719E E. Sasha and Array(线段树)
- mysql随机更新时间
- iOS常见问题(5)
- DevExpress ASP.NET 使用经验谈(8)-ASPxGridView自定义列和基本事件
- iPhone与iWatch连接、控制、数据传递(Swift)
- zookeeper-3.4.5安装&;3台机器安装之后 ./zkServer.sh status 之后会显示“Error contacting service. It is probably not running.”的解决办法
- JavaScript参考
- Tomcat多个项目部署,通过Nginx反向代理分别配置二级域名的流程
- 基于babylon3D模型研究3D骨骼动画(1)
- win10双系统安装卸载ubuntu
- bower 基础认识
- Keepalived配置文件详解
- 整理volatile相关知识点
- EOS的发币逻辑
- 对于jsp中编码的理解
热门文章
- [USACO16JAN]愤怒的奶牛Angry Cows
- bzoj1861 [Zjoi2006]Book 书架——splay
- hdu 2476 (string painter) ( 字符串刷子 区间DP)
- UVa 11401 Triangle Counting (计数DP)
- adb: command not found 解決方法(转载)
- bzoj 4195: [Noi2015]程序自动分析【并查集】
- React实战之将数据库返回的时间转换为几分钟前、几小时前、几天前的形式。
- Docker+Jenkins+Git发布SpringBoot应用
- 采购发票检验MIRO差异科目设置
- ROS学习笔记十:URDF详解