java-多线程(按照狂神说视频编写)
多任务
例如生活中的例子:
①边吃饭边玩手机
②疯狂司机,边开车+打电话+打点滴
现实中太多这样同时做多件事情的例子了,看起来是多个任务都在做,其实本质上我们的大脑在同一时间依旧只做了一件事情。
多任务处理是指用户可以在同一时间内运行多个应用程序,每个应用程序被称作一个任务.Linux、windows就是支持多任务的操作系统,比起单任务系统它的功能增强了许多。
线程
概念:线程(英语:thread)是操作系统能够进行运算调度的最小单位。大部分情况下,它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
多线程Thread
原来是一条路,慢慢因为车太多了,道路堵塞,效率极低。为了提高使用的效率,能够充分利用道路,于是加了多个车道。从此,妈妈再也不用担心道路堵塞了。
普通方法调用
多线程调用
程序
程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。
进程Process
概念:而进程则是执行程序的一次执行过程,它是一个动态的概念。是系统资源分配的单位
通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程是CPU调度和执行的的单位。
本章核心
线程的创建
有三种方式,具体看图
一.继承Threa类
继承Thread类,重新run方法,调用start方法
注意:线程不一定立即执行,由CPU调度执行
@Override
public void run() {
// run方法线程体
for (int i = 0; i < 200; i++) {
System.out.println("我是run方法"+i);
}
}
public static void main(String[] args) {
//main线程,主线程
//创建一个线程对象并调用
TestThread1 testThread1=new TestThread1();
testThread1.start();
for (int i = 0; i < 1000; i++) {
System.out.println("我是主线程"+i);
}
}
}
图片下载小案例
注意:要先导入一个jar包(commons-io-2.6.jar)
public class TestThread2 extends Thread{
private String url; //网络图片地址
private String name; //保存的文件名
public TestThread2(String url, String name) {
this.url = url;
this.name = name;
}
@Override
public void run() {
WebDownloader webDownloader=new WebDownloader();
webDownloader.downloader(url,name);
System.out.println("下载了文件名为:"+name);
}
//下载图片线程的执行体
public static void main(String[] args) {
TestThread2 t1=new TestThread2("https://n.sinaimg.cn/news/transform/w150h150/20180223/xbJU-fyrswmv2029131.jpg","1.jpg");
t1.start();//上述url地址是图片地址
}
}
//下载器
class WebDownloader{
//下载方法
public void downloader(String url,String name){
try {
FileUtils.copyURLToFile(new URL(url),new File(name));
} catch (IOException e) {
e.printStackTrace();
System.out.println("IO异常,downloader方法出现问题");
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通