三分钟学会多线程

要在JAVA里实现线程需要了解线程的原理,了解完原理以后,这篇文章会举一个例子来实现多线程。

一、进程与线程

  1. 进程
    进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分配CPU时间,程序开始真正运行。

  2. 线程
    线程是一条执行路径,是程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位,一个进程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。线程由CPU独立调度执行,在多CPU环境下就允许多个线程同时运行。同样多线程也可以实现并发操作,每个请求分配一个线程来处理。

    一个正在运行的软件(如迅雷)就是一个进程,一个进程可以同时运行多个任务( 迅雷软件可以同时下载多个文件,每个下载任务就是一个线程), 可以简单的认为进程是线程的集合。

    线程是一条可以执行的路径。多线程就是同时有多条执行路径在同时(并行)执行。

  3. 进程与线程的关系
    一个程序就是一个进程,而一个程序中的多个任务则被称为线程。进程是表示资源分配的基本单位,又是调度运行的基本单位,亦即执行处理机调度的基本单位。 进程和线程的关系:
    一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程是操作系统可识别的最小执行和调度单位。

    如果把运行优酷APP比作进程,那么你在看视频的同时又进行缓存别的视频,那么这两个事件便是两个线程,此时CPU可能就会将1秒钟分为100份,每一份只运行一个线程,即只播放视频或者只缓存视频,完成在多个线程中的来回切换,但是切换时间及其短暂,人眼无法识别,因此看上去便是CPU同时运行多个线程,实际上一个CPU在一个时刻只能服务于一个线程。

  4. 为什么要使用多线程
    多线程可以提高程序的效率。
    实际生活案例:老师要求你搬十套桌椅,你一次只能搬一套,那么你需要搬十次,假设一次6分钟,那么你需要一小时完成这个任务,若是你找九个同学一起搬桌椅,一人搬一套,那么只要花6分钟就能完成这个任务。如果把每个人看做一个线程,多个人即多线程可以提高程序的效率。

  5. 多线程之间的关系
    一般线程之间比较独立,互不影响
    一个线程发生问题,一般不影响其它线程

二、多线程创建方式

1、继承 Thread类
2、实现 Runable接口
3、实现 Callable接口
下面以实现Runable接口为例
首先建立一个Task类实现Runnable接口,将要线程执行的操作写在run方法里面,下面是实现一个计数功能,判断是A或者B线程,分别计数,并输出。
public class Task implements Runnable{
int i = 0;
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
//暂停
try {
Thread.sleep(10);
} catch (InterruptedException a) {
// TODO Auto-generated catch block
a.printStackTrace();
}
//判断哪个线程,执行不同任务
if(name ==“B”){
System.out.println(name + i++);
}
if(name ==“A”){
System.out.println(name + i++);
}
}
}
}

[运行效果](https://img-blog.csdnimg.cn/20190804142805487.png)

然后再建立的界面中,运行线程,这样界面一打开,线程便会自动运行
//建立Task类的对象A实现Runnable接口
Task t1 = new Task(“A”);
//创建Thread类的对象
Thread thread1 = new Thread(t1);
//启动线程
thread1.start();
//建立Task类的对象B实现Runnable接口
Task t2 = new Task(“B”);
//创建Thread类的对象
Thread thread2 = new Thread(t2);
//启动线程
thread2.start();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值