Android-Thread 线程<二>
2023-12-01 本文已影响0人
没有了遇见
进程:是系统进行内存分配的基本单位,是计算机进行数据处理的一次活动,进程是线程的容器.
线程:是操作系统进行运算调度的最小单位,包含在进程中.一个进程最少有一个线程
1:线程总结:
1:一个进程最少有一个进程
2:线程基于内存共享,所以线程间内存是共享的.
3:在CPU调度进程之前需要准备一些数据,如开辟内存,准备资源文件,以及运行过程中产生的一些变量的临时的存储,这些和进程进行关联的对象称之为上下文Context.
问题?
线程和进程的区别?
进程是一个程序或者一个应用,线程是进程的一个认为,进程是线程的容器.
2:线程方法说明
1:Thread.sleep() 强制线程休眠一段时间 进度倒计时等待状态
2:thread.start() 启动线程,线程进入就绪状态 等待CPU调度
3:thread.join() 将当前线程加入CPU,并将前一个线程等待,等待当前线程执行完之后再执行
4:Thread.yield() 使得当前线程退出CPU占用,将CPU调度全分配给其他同等优先级的线程
5:thread.interrupt() 将当前线程状态置为阻塞位标志置为阻断状态 但是不会中断线程(注意不会中断线程,要想实现终端的操作需要在thread中加死循环判断)
注意:
1:线程处于阻塞状态 调用thread.interrupt()会改变标志位但是会抛异常
2:若当前非阻塞状态,会将阻塞标志位改为true
3:线程状态
线程状态说明:
1:Thread.State.NEW 线程创建状态
Thread thread= new Thread();之后线程就进入了创建的 NEW 状态
2:Thread.State.RUNNABLE 线程就绪状态
线程就绪状态就是线程已经启动,等待CPU调用,cpu调度到线程的时候可以直接运行
线程就绪状态情况:
- thread.start() 线程启动后就会进入RUNNABLE就绪状态
- sleep(long) 休眠方法执行结束后会进入RUNNABLE 状态
- 其他线程通过join()方法加入运行结束后,当前线程进入RUNNABLE就绪状态
- 当前线程调用yield()方法 当前线程进入就绪状态
3:Thread.State.BLOCKED 阻塞状态
Thread 代码运行到拥有锁(Synchronized Lock)的代码块时,Thread就进入了阻塞状态
4:Thread.State.WAITING 等待状态 进入此状态不会被CPU调度,需要被显示的唤醒才能执行
怎么进入WAITING状态:
1:object.wait() 会使线程进入等待状态,需要 object.notify() 唤醒
2:其他线程通过join()加入当前线程前边,当前线程就处于WAITING状态,join()的线程运行结束后切换成RUNNABLE状态.
5:Thread.State.TIMED_WAITING 倒计时等待状态.这种状态不会被CPU调用,需要倒计时结束才会被调用
怎么进入TIME_WAITING:
1:Thread.sleep(long)
2:object.wait(long)
3:join(long)
6:Thread.State.TERMINATED 结束状态 一个完全运行完成的线程状态 结束状态.
4: 问题
1:Thread 中start() 和run 的区别
start() 是启动进程的方法 run 只是Runable 的抽象方法实现
2:Thread sleep 和wait 的区别
1:Thread.sleep() sleep() 是Thread 的方法 wait 是Object的方法
2:wait()需要在同步代码块中使用,作用是释放锁,sleep和锁操作无关可以使用到任何地方
3:wait () 释放锁 sleep() 不释放锁
3:Thread的常见操作
1:Thread 开启
new Thread().start()
2:Thread 插入
thread.join()
3:Thread 排序
thread.join()
4:中断当前线程
thread.yield()
5:中断标志位
thread.interrupt()(只中断了标志位)