多线程基础

多线程基础

核心概念:

  1. 线程就是独立的执行路径
  2. 在程序运行时,即使没有自己创建线程,后台也会多个线程
  3. main()称为主线程,为系统的入口,用于执行整个程序;
  4. 在一个进程中,如果开辟了多个线程,线程的运行由调度器安排调度,调度器是与操作系统紧密相关的,先后顺序是不能人为的干预的
  5. 对同一份资源操作时,会存在资源抢夺的问题,需要加入并发控制;
  6. 线程会带来额外的开销,如CPU调度时间,并发控制开销。
  7. 每个线程在自己的工作内存交互,内存控制不当会造成数据不一致
Thread

创建线程方式一:继承Thread 类,重写run()方法,创建线程对象方法调用start开启线程

多线程 :多条执行路径,主线程和子线程并行交替执行。

package com.Jinone.www;

public class TextThread extends Thread {

	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int i=0;i<20;i++) {
			System.out.println("我在看代码"+i);
		}
	}
	public static void main(String[] args) {
		TextThread textThread=new TextThread();
		textThread.start();
		for(int i=0;i<20;i++) {
			System.out.println("我在学多线程"+i);
		}
	}
	
}

结果:

我在学多线程0
我在学多线程1
我在学多线程2
我在学多线程3
我在学多线程4
我在学多线程5
我在学多线程6
我在学多线程7
我在学多线程8
我在学多线程9
我在看代码0
我在看代码1
我在看代码2
我在学多线程10
我在看代码3
我在看代码4
我在看代码5
我在看代码6
我在看代码7
我在看代码8
我在学多线程11
我在学多线程12
我在学多线程13
我在学多线程14
我在学多线程15
我在学多线程16
我在学多线程17
我在学多线程18
我在学多线程19
我在看代码9
我在看代码10
我在看代码11
我在看代码12
我在看代码13
我在看代码14
我在看代码15
我在看代码16
我在看代码17
我在看代码18
我在看代码19

从结果上看,两个线程相交运行

总结:注意,线程开启不一定立即执行,由CPU调度执行.

package com.Jinone.www;

import java.io.IOException;

public class TextThread extends Thread {
	private String url; //网络图片地址
	private String name; //保存的文件名
	public TextThread(String url, String name) {
		super();
		this.url = url;
		this.name = name;
	}
    //下载图片线程的执行体
	@Override
	public void run() {
		WebDownloader webDownloader=new WebDownloader();
		webDownloader.downloader(name, url);
		System.out.println("下载的了文件名为:"+name);
	}
	public static void main(String[] args) {
		TextThread textThread=new TextThread("https://exp-picture.cdn.bcebos.com/e076d77622bc7dc54fc4c6eb5e460596b9142938.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1","1.jpg");
		TextThread textThread1=new TextThread("https://exp-picture.cdn.bcebos.com/a99a494afa32939cb85432065719ce2c5a1b1538.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1","2.jpg");
		textThread.start();
		textThread1.start();
	}
}
//下载器
	class WebDownloader{
		//下载方法
		public void downloader(String name,String url) {
			try {
				FileUtiles.copyURLToFile(new URL(url),new File(name));
			}catch(IOException e){
				e.printStackTrace();
				System.out.println("IO异常,downloader方法出问题");
			}
			
		}
		
	}
//结果:
//下载文件名为:3.jpg
//下载文件名为:1.jpg
//下载文件名为:2.jpg
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值