Java的知识点25——程序、进程与线程 || 线程的创建和启动

本文详细介绍了在Java中创建和启动线程的三种方法,包括继承Thread类、实现Runnable接口以及实现Callable接口。通过具体代码示例,展示了如何利用这些方法下载图片,对比了不同创建方式的优缺点。

程序、进程与线程

进程的特点:动态性并发性独立性

并发和并行的区别

并发:多个CPU同时执行多个任务
并行:一个CPU(采用时间片)同时执行多个任务

 

 

注:很多多线程是模拟出来的,真正的多线程是指有多个cpu,即多核,如服务器。如果是模拟出来的多线程,即在一个cpu的情况下,在同一个时间点,cpu只能执行一个代码,因为线程之间切换很快,所以就有同时执行的错觉。


线程的创建和启动

线程的创建
• 方式1:继承Java.lang.Thread类,并覆盖run() 方法
• 方式2:实现Java.lang.Runnable接口,并实现run() 方法
• 方式3:实现callable接口

注:run( )称为线程体

创建线程方式一:
 * 1. 创建:继承Thread+重写run
 * 2. 启动:创建子类对象+start()方法(不保证立即运行  由cpu去调用)

/**
 * 创建线程方式一:
 * 1. 创建:继承Thread+重写run
 * 2. 启动:创建子类对象+start()方法
 * @author Administrator
 *
 */
public class StartThread extends Thread{
	//线程入口点
	public void run() {
		super.run();
		for(int i=0;i<20;i++) {
			System.out.println("一边听歌");
		}
	}

	public static void main(String[] args) {
		//创建子类对象
		StartThread st=new StartThread();
		//启动线程
		st.start();
//		st.run(); //普通方法的调用
		for(int i=0;i<20;i++) {
			System.out.println("一边coding");
		}
	}
}

 


WebDownloader.java

/**
 * 下载图片 
 * @author Administrator
 *
 */
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import org.apache.commons.io.FileUtils;


public class WebDownloader {
	/**
	 * 下载
	 * @param url
	 * @param name
	 */
	public void download(String url,String name) {
		try {
			FileUtils.copyURLToFile(new URL(url), new File(name));
		} catch (MalformedURLException e) {
			e.printStackTrace();
			System.out.println("不合法的url");
		} catch (IOException e) {
			e.printStackTrace();
			System.out.println("下载失败"); 
		}
	}
}

TDownloader.java


public class TDownloader extends Thread {
	private String url;  //远程路径
	private String name;  // 存储名字
	
	public TDownloader(String url, String name) {
		super();
		this.url = url;
		this.name = name;
	}

	@Override
	public void run() {	
		super.run();
		WebDownloader wd= new WebDownloader();
		wd.download(url, name);
		System.out.println(name);
	}
	
	public static void main(String[] args) {
		TDownloader td1=new TDownloader("http://img4.3lian.com/sucai/img3/399/01+.jpg", "1.jpg");
		TDownloader td2=new TDownloader("http://img4.3lian.com/sucai/img3/399/10+.jpg", "2.jpg");
		TDownloader td3=new TDownloader("http://img4.3lian.com/sucai/img3/399/15+.jpg", "3.jpg");
		//启动三个线程
		td1.start();
		td2.start();
		td3.start();
		
	}
}

	

  注:必须在工程目录下,导入此文件



创建线程方式二:
 * 1. 创建:实现Runnable+重写run
 * 2. 启动:创建实现类对象+Thread对象+start()方法

推荐使用Runnable接口:避免单继承的局限性,优先使用接口
 * 优点:方便共享资源

/**
 * 创建线程方式二:
 * 1. 创建:实现Runnable+重写run
 * 2. 启动:创建实现类对象+Thread对象+start()方法
 * @author Administrator
 *
 */
public class StartRun implements Runnable{
	//线程入口点
	public void run() {
		for(int i=0;i<20;i++) {
			System.out.println("一边听歌");
		}
	}

	public static void main(String[] args) {
//		//创建实现类对象
//		StartRun sr=new StartRun();
//		//创建代理类对象
//		Thread t=new Thread(sr);
//		//启动
//		t.start();
		new Thread(new StartRun()).start();
		for(int i=0;i<20;i++) {
			System.out.println("一边coding");
		}
	}
}

 


采用Runnable接口,对TDownloader.java 进行修改为IDownloader.java   实现上面的效果

public class IDownloader implements Runnable{
	private String url;  //远程路径
	private String name;  // 存储名字
	
	public IDownloader(String url, String name) {
		super();
		this.url = url;
		this.name = name;
	}

	@Override
	public void run() {	
		WebDownloader wd= new WebDownloader();
		wd.download(url, name);
		System.out.println(name);
	}
	
	public static void main(String[] args) {
		IDownloader td1=new IDownloader("http://img4.3lian.com/sucai/img3/399/01+.jpg", "1.jpg");
		IDownloader td2=new IDownloader("http://img4.3lian.com/sucai/img3/399/10+.jpg", "2.jpg");
		IDownloader td3=new IDownloader("http://img4.3lian.com/sucai/img3/399/15+.jpg", "3.jpg");
		//启动三个线程
		new Thread(td1).start();
		new Thread(td2).start();
		new Thread(td3).start();
	}
}

	

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值