摘要: sleep和yield都不会释放锁 sleep不出让cpu使用权,仅暂停执行 yield出让cpu使用权,但处于可运行状态 wait、notify、notifyall被调用之前需要持有锁,调用之后释放锁,是一个“等待通知机制” notify是cpu唤醒被锁的对象上随意一个线程,所以最好使用notif 阅读全文
posted @ 2019-12-15 20:43 那只狐狸 阅读(652) 评论(0) 推荐(0) 编辑
摘要: 一、checked异常和unchecked异常区别? checked异常是编译时可以推断出来可能发生异常,ide会提示,比如ioexception、interruptExcetion; unchecked异常是运行时异常,比如OutOfBounceExcetion 二、线程异常 因为run方法没有c 阅读全文
posted @ 2019-12-15 18:59 那只狐狸 阅读(384) 评论(0) 推荐(0) 编辑
摘要: 支持高并发是目的,多线程是手段,进一步的手段是分布式 一、线程的状态 1.新创建 2.可运行:运行状态,由cpu决定在不在执行 3.阻塞:没抢到锁 4.等待/计时等待,等待某些条件(sleep wait) 5.被终止 二、特别点 1.守护线程的try{}finaly块中,finnaly不一定执行 2 阅读全文
posted @ 2019-12-15 18:49 那只狐狸 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 建议自定义标志位和IsInterrupted标志位结合使用 使用自定义标志位的方法如果是阻塞方法(sleep),则自定义标志位无效; 如果单单使用IsInterrupted标志位,又因为java的多线程是协作方式而不是强制方式,所以可能不理会“打招呼”式的中断请求(特别是IO通信方法); 只有两个标 阅读全文
posted @ 2019-12-15 17:22 那只狐狸 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 一、JAVA内存模型中,线程的工作内存和共享内存的交互协议规定了8种操作, 1.其中的读取和载入这一对、赋值和存储这一对不是原子操作; 2.每一对中只要求顺序执行 不一定连续执行 二、synchronized语义规范在多写多读场景下保证了原子性,因为有锁;语义如下: 1.进入同步块钱,先清空工作内存 阅读全文
posted @ 2019-12-15 16:47 那只狐狸 阅读(223) 评论(0) 推荐(0) 编辑