java线程

文章目录

需要先梳理java线程和系统的线程

通常系统是 线程 下面还有进程 thread-process

在java中有自己定义线程需要和系统的线程区别

阻塞/非阻塞:是指一个业务需要a,b,c三个结果,阻塞是等待结果,非阻塞是去完成别的

串行/并行:这个通常是指业务逻辑的是逐个完成,还是一起完成

多线程:100件事的并行完成,通常还包含这线程池

对于多线程执行就存在资源挤占和数据处理问题通常是有两种方式

  1. 锁在特定操作通常是修改数据时加锁,让其他线程逐个执行,具有排他性
  2. 通过刷新内存,保证多线程中某个线程修改,其他线程能拿到最新的数据

要是我定义的话 线程可能会是 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) 使当前线程休眠(暂停运行)指定的时间

img

JAVA中的线程世界 - 掘金