线程

线程:还会涉及到一些名词概念:
程序,进程,线程,多进程,多线程

进程:是一个运行中的程序的实例。
进程的两个特点:
(1)是一个实体,都有自己独立的地址空间,分为文本区域,数据区域和堆栈。
文本区域用来存储编写的程序的代码,数据区域用来存储运行时所需要的
数据(动态分配的内存),堆栈用来存储运行时涉及到的指令和本地变量
(2)是一个"运行中的程序",程序本身是一个没有生命的实体,只有当处理器
赋予它生命时,它才能称之为一个活动的实体,即进程。
进程是操作系统级别的基本单元。
通俗点说:进程就是操作系统运行的一个任务(一个应用程序运行时,就对应一个进程)

线程的状态图解析:
(1) 新建状态: 即新建一个线程对象,设置好需要执行的任务
(2) 就绪状态: 调用线程的start方法,进入准备状态,等待cpu分配时间片段
(3) 运行状态: 当cpu将时间片段给了线程对象后,线程开始执行任务。
(4) 阻塞状态:正在运行中的线程由于某种原因,放弃了cpu的使用权
即该线程放弃时间片段,进入阻塞状态。
阻塞状态分为三种:
等待阻塞: 运行中的线程调用wait方法时,jvm将
此线程放入等待池中
同步阻塞:运行中的线程想要获取同步的锁对象时,如果锁对象被其他占用,
则,jvm将此线程放入锁池中
其他阻塞: 当线程中执行到阻塞方法或者是Thread.sleep()或者是其他线程的join
时,该线程进行阻塞状态
(5) 当线程执行完任务后,表示结束。

线程的创建方式(3种)
(1)继承Thread类,重写run方法,定义任务内容。然后调用
start方法,用于启动线程。(切记,不是调用run方法)
(2)实现接口Runnable,重写run方法,定义任务内容,然后将任务
传给Thread对象,然后由Thread调用strat方法,执行任务
(3)使用FutureTask创建对象,再使用Callable创建子类对象,
重写call方法(相当于run方法),再将Callable对象传给
FutureTask,再将FutureTask对象传给Thread对象,调用
start方法,启动线程

第二种方式与第一种比较,
(1)将线程对象和任务对象分开,降低了耦合度,便于维护
(2)避免了java中单继承的限制
(3)适合相同的任务代码块处理同一个资源
第三种方式:call方法带有返回值。

线程API:
常用构造器:
Thread(Runnable r):
创建一个指定任务的线程对象
Thread(Runnable r,String name)
创建一个指定任务,并且指定名称的线程对象
Thread(String name)
创建一个指定名称的线程对象
常用方法:

线程的优先级:
1-10,10为最高级别,1为最低级别,5为默认级别
Thread.MIN_PRIORITY–最小优先级
Thread.MAX_PRIORITY–最高优先级
Thread.NORM_PRIORITY–默认优先级

守护线程:线程分两类,一类是普通线程(前台线程),
一类是守护线程(后台线程)。
当线程只剩下守护线程后,所有线程都结束。

static sleep(long time):
线程的静态方法,用于使当前线程进入阻塞状态,时间为time毫秒。
time毫秒后,会进入就绪状态。如果期间被打断,会出现异常
InterruptException

join():
作用是将当前线程插入到某一个线程中,使某一个线程进入阻塞状态。
当前线程执行完后,另一个线程进入就绪状态
/**Thread类提供的一个静态方法,void sleep(long ms)
* 表示让当前线程休眠ms秒,在此过程中,如果该线程被打断,会抛出InterruptedException
* 如果休眠过程一直没被打断,时间一到,线程的休眠状态自动解除,等待CPU的到来
* 一旦CPU过来,则继续执行后续代码
* */
/*void interrupt()
* 手动打断某个正在休眠的线程,一旦调用该方法,则正在休眠的线程会抛出InterruptedException
*/
/在匿名内部类中,如果要引用其它的局部变量,要在该类上加上final/

/**
* void join()
* 等待某个线程结束,哪个线程调用该方法
* 就等待哪个线程结束,该线程结束以后
* 才会继续之后本线程后续代码
* /
/
*

  • 模拟多个用户进入商场的试衣间试衣服的过程

*/
// 当多个线程同时访问同一资源时,容易出现线程安全问题,解决线程安全问题的方法:同步
// 同步:一个做完了,另一个再做
// 异步:各做各的
// 如何进行线程同步?

/*

  • 1同步方法(在方法上加锁,使用关键字)
  • 2同步代码块,在代码块上加锁
    3锁对象: 要执行线程同步的对象,可以是任意对象,但是要求每个线程看到的锁对象必须是通过一个对象词可以,
  • 不忍起不到线程同步的作用
    **/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值