进程、线程、多线程
◆说起进程,就不得不说下程序。程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。 ◆而进程则是执行程序的一-次执行过程,它是一个动态的概念。 是系统资源分配的单位 ◆通常在一个进程中可以包含若干个线程,当然一个进程中至少有一 个线程,不然没有存在的意义。线程是CPU调度和执行的的单位。
注意:很多多线程是模拟出来的,真正的多线程是指有多个cpu,即多核,如服务器。如果是模拟出来的多线程,即在一个cpu的情况下, 在同一个时间点,cpu只能执行一个代码,因为切换的很快,所以就有同时执行的错局。
Thread
◆自定义线程类继承Thread类 ◆重写run()方法,编写线程执行体 ◆创建线程对象,调用star()方法启动线程
package com.shao.xiancheng;
//创建线程方式一:继承Thread类,重写run()方法,调用strart()开启线程
//总结:注意,线程开启不一定立即执行,由CPU调度执行
public class TestThread1 extends Thread {
Thread实例,下载网图
package com.shao.xiancheng;
import com.sun.org.apache.bcel.internal.generic.NEW;
import com.sun.org.apache.xpath.internal.objects.XString;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.net.URL;
//联系Thread,实现多线程同步
public class TestThread2 extends Thread{
private String url;//网络图片地址
private String name;//保存的文件
//带参数的构造器
public TestThread2(String url,String name){
this.url=url;
this.name=name;
}
实现Runnable
◆定义MyRunnable类实现Runnable接口 ◆实现run()方法,编写线程执行体 ◆创建线程对象,调用start()方法启动线程
package com.shao.xiancheng;
public class TestThread3 implements Runnable {
Runnable 实例,下载网图
package com.shao.xiancheng;
import com.sun.org.apache.bcel.internal.generic.NEW;
import com.sun.org.apache.xpath.internal.objects.XString;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.net.URL;
//联系Thread,实现多线程同步
public class TestThread2 implements Runnable{
private String url;//网络图片地址
private String name;//保存的文件
//带参数的构造器
public TestThread2(String url,String name){
this.url=url;
this.name=name;
}
龟兔赛跑
package com.shao.xiancheng;
public class Race implements Runnable{
//胜利者
private static String winner;
实现Callable接口
1.实现Callable接口,需要返回值类型 2.重写call方法,需要抛出异常3.创建目标对象 4.创建执行服务: ExecutorService ser = Executors.newFixedThreadPool(1); 5.提交执行: Future<Boolean> result1 = ser. submit(t1); 6.获取结果: boolean r1 = result1.get() 7.关闭服务: ser.shutdownNow();
package com.shao.xiancheng;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.concurrent.*;
//有返回值
public class TestCallable1 implements Callable<Boolean> {
private String url;//网络图片地址
private String name;//保存的文件
//带参数的构造器
public TestCallable1 (String url,String name){
this.url=url;
this.name=name;
}