java线程

1、进程:操作系统以进程为单位,分配系统资源,进程是资源分配的最小单位
2、线程:是操作系统调度执行的最小单位
3、线程同步:一个线程依赖于另一个线程,他没有得到另一个线程的消息时等待,直到被唤醒。
4、线程互斥:对与共享的系统资源,各个单个线程互斥,排它。

5、上下文切换:是指从一个进程或线程切换到另一个线程或者进程
在内核态进行上下文切换,
上下文切换是多任务操作系统
尽量避免上下文切换,比较耗费资源

6、内核态和用户态
内核态:不受任何限制可以访问硬件和内存,
用户态:执行代码不能直接访问硬件和内存,

7、线程的生命周期
操作系统层:初始状态、可运行状态、运行状态、休眠状态、终止状态
JVM层面:
NEW:线程start前
RUNNABLE(运行状态):,start
BLOCKED(阻塞):synchronized才会有这个状态,竞争没有获取到锁
WAITING:等待比如join()
TIMED_WAITING:超时等待
TERMINATED:结束终止
在这里插入图片描述
8、 Thread().start()和 Thread().run()的区别
start通过start0()调用JVM的线程的创建,然后JVM再去调用操作系统的创建,这个过程中会涉及到上下文的切换。而run就是一个普通的方法调用

9、协程:用户态创建的,在线程之中,是轻量级的,适用于IO任务,但不适用计算量大的。

10、java线程是抢占式的,可以通过设置抢占式的优先级,默认是5,但是没啥太大的效果
thread.setPriority(Thread.MAX_PRIORITY);

11、Thread.sleep() 不会释放锁,Object中的wait()会释放锁

12、怎么去停止线程
(1)、直接调用stop()如果线程执行一半就调用,下面的逻辑就不会走了,会出现线程安全问题,还会直接释放锁,不推荐使用。
(2)可以用中断,根据线程自身运行的状态,处理完成该线程的任务,才会停止该线程。
thread.interrupt( ); 设置线程中断标志位为true ,不会停止线程。
thread.isInterrupted(); 判断当前中段标志位是否为true ,不会清除标志中断位。
Thread.interrupted(); 判断点前线程的中断标志位是否为true,并清除中断标志位。

如果方法中判断是否中断,用到了Thread.sleep(1); 必须在调用一次 Thread.currentThread().interrupt();才能达到中断的效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值