文章目录
需要先梳理java线程和系统的线程
通常系统是 线程 下面还有进程 thread-process
在java中有自己定义线程需要和系统的线程区别
阻塞/非阻塞:是指一个业务需要a,b,c三个结果,阻塞是等待结果,非阻塞是去完成别的
串行/并行:这个通常是指业务逻辑的是逐个完成,还是一起完成
多线程:100件事的并行完成,通常还包含这线程池
对于多线程执行就存在资源挤占和数据处理问题通常是有两种方式
- 锁在特定操作通常是修改数据时加锁,让其他线程逐个执行,具有排他性
- 通过刷新内存,保证多线程中某个线程修改,其他线程能拿到最新的数据
要是我定义的话 线程可能会是 start run waiting waiting_timeout end
加锁的话需要参照物,java实现的就是在object 同时object对象实例有 wait 这是为啥??
为什么方法和属性不放在thread类里面,后者已经有很多本地的方法,包括
Thread.sleep
Thread.yield
interrupt
join
sleep
wait
notify
notyfyall
方法 | 功能 | 备注 |
---|---|---|
static Thread currentThread() | 返回当前线程,即当前代码的执行线程(对象) | 同一段代码对Thread.currentThread()的调用,其返回值可能对应着不同的线程(对象) |
void run() | 用于实现线程的任务处理逻辑 | 该方法是由Java虚拟机直接调用的,一般情况下应用程序不应该调用该方法 |
void start() | 启动相应线程 | 该方法的返回并不代表相应的线程已经被启动。一个Thread实例的start方法只能够被调用一次,多次调用会导致异常的抛出 |
void join() | 等待相应线程运行结束 | 若线程A调用线程B的join方法,那么线程A的运行会被暂停,直到线程B运行结束 |
static void yield() | 使当前线程主动放弃其对处理器的占用,这可能导致当前线程被暂停 | 这个方法是不可靠的。该方法被调用时当前线程可能仍然继续运行(视系统当前的运行状况而定) |
static void sleep(long millis) | 使当前线程休眠(暂停运行)指定的时间 |