JAVAOOP多线程

进程每个独立运行的任务对应一个进程,每个进程可以产生多个线程

特点:1,进程是系统运行程序的基本单位

2,每一个进程都有自己独立的一块内存空间,一组系统资源

3,每一个进程的内部数据和状态都是完全独立的

系统中可以有多个进程,包括系统进程和用户进程

线程:线程是进程中执行运算的最小单位,可完成一个独立的顺序控制流程。每个进程中至少有一个线程,被称为主线程,来作为程序运行的入口点。

一个进程中有多个线程,用来完成不同的工作称为“多线程”。每个任务是一个线程,多个线程共享相同的地址空间并且共同分享同一个进程。

好处:充分利用CPU资源;简化编程模型;带来良好的用户体验

Thread

Java通过Thread类讲线程所必须的功能都封装了起来。

java.lang.Thread类支持多线程编程

Thread类常用方法

构造方法

说明

Thread()

分配新的Thread对象

Thread(Runnable target)

分配新的Thread对象,target为run()方法被调用的对象

Thread(Runnable target,String name)

分配新的Thread对象,target为run()方法被调用的对象,name为新线程的名称

void run()

执行任务操作的方法

void start()

使该线程开始执行,Java虚拟机调用该线程的run()方法

void sleep(long millis)

在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)

String getName()

返回线程的名称

int getPriority()

返回线程的优先级

void setPriority(int newPriority)

更改线程的优先级

static Thread currentThread()

返回当前正在执行的线程对象的引用

boolean isAlive()

测试线程是否处于活动状态

void join()

等待该线程终止,等待该线程完成后才执行其他线程

void interrupt()

中断线程

void yield()

暂停当前正在执行的线程对象,并执行其他线程

MAX PRIORITY线程具有最高优先级

MIX PRIORITY线程具有最低优先级

NORM PRIORITY分配给线程的默认优先级

主线程

main()方法即为主线程入口

产生其他线程的线程

必须最后完成执行,因为它执行各种关闭动作

使用线程步骤:1,定义一个线程,同时指明这个线程所要执行的代码

2,创建线程对象

3,启动线程

4,终止线程

创建线程的两种方法:继承Thread类或实现Runnable接口

继承Thread类创建线程

创建线程:定义MyThread类继承并重写Thread类的run()方法,编写线程执行体,创建线程对象,调用start()方法启动线程,run()方法调用实例

自定义线程默认名称为:Thread-序号(为从0开始的整数)

start():线程的

run():普通方法,称为线程体

                  CPU分配时间片的时候,run()开始执行

线程的五种状态:创建、就绪run()、阻塞(sleep()、yield()、wait()、join())、运行、死亡(异常死亡、正常死亡)

sleep:线程调用此方法的时候,占用cpu资源不释放,其他线程无法获取cpu资源,必须等待

wait(Object中的方法):线程调用的时候会释放cpu资源,其他线程无需等待,如果调用此方法,就必须使用notify()唤醒。

yield礼让:是概率问题

简答一:单CPU的机器如何同时执行一个线程

单CPU机器同时只能执行一条指令,不可能同时执行多个任务。只是将时间分成多个时间片,分配给不同的路线。只是表面上看上去是多个线程同步执行,其实是因为不同线程之间的时间非常短。看起来是多个线程同时执行。

简答二:关于start()与run()

线程实例调用start()方法和调用run()方法有着天壤之别,run是调用实例方法,只有主线程执行,只有一条执行路径,start才是真正的启动线程。

简答三:线程常见的5种状态:1,创建:创建线程对象后已经取得了相应的资源,却没有处于运行状态,可以通过Thread类的方法来设置线程对象的状态。

2,就绪:通过start()方法启动线程,就会进入就绪状态。进入线程队列排队,等待CPU资源。

3,运行:就绪状态的线程获得CPU资源时,即可转入运行状态,执行run()方法。

4,阻塞:正在运行的程序因某种原因不能继承运行时,进入阻塞状态。是一种不可运行的状态。可能出现的原因:线程优先级比较低,因此不能获得CPU资源;使用sleep()方法使线程休眠;通过调用wait()方法使线程等待;通过调用yield()方法,线程显示出让CPU控制权;

线程由于等待一个文件I/O事件被阻塞

5,死亡:线程的run()方法运行完毕,就会进入死亡状态。不具有继承运行的能力。

猜你喜欢

转载自www.cnblogs.com/ACCPGuo/p/9354310.html