-
synchronized关键字实现互斥行为,既可以出现在方法体之上也可以出现在方法体内,以一种块的形式出现。 然后通过lockObject的wait方法(注意:wait的线程被存放在wait set 中)和notifyAll方法实现同步。 步骤: 1.互斥:同一时间,只能有一个线程访问数据 2.同步:通信机制;一个线程完成,以某种方式通知其他线程 3.锁的概念:private final Object lockObj = new Object(); 4.互斥实现方式:synchronized关键字 synchronized(lockObj){---执行代码----}加锁操作 lockObj.wait();线程等待状态,以避免线程持续申请锁,不去竞争cpu资源 lockObj.notifyAll();唤醒所有lockObj对象上等待的线程查看全部
-
互斥与同步:工作与取快递查看全部
-
条件争用的过程:查看全部
-
争用条件:查看全部
-
如何正确停止线程 一、错误一:stop()方法 1、not stop:stop()方法会使线程戛然而止 2、使程序突然中止,无法完成完整的业务步骤,也无法进行清理工作 二、错误二:interrupt()方法 1、interrupt()方法只能设置interrupt标志位(且在线程阻塞情况下,标志位会被清除,更无法设置中断标志位),无法停止线程 三、正确方法:设置退出标志 1、使用退出标志位来停止while循环 2、完成最后一次业务后跳出while循环后,之后进行一些清理工作 在异常抛出之前,线程刚好执行了Thread.sleep(1000); 然后在主线程main中就是休眠的这一秒中继续执行了thread.interrupt(); 因为thread是在休眠之中的,所以在 try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } 中抛出了异常,也就是说这时候的因为sleep中采用的interrupt()中断方法已经被处理了,就是理解为回归正常, 所以以后的isInterrupt()方法判断的都是没有中断的了,就是返回false。因为它再次循环就是在执行了异常之后,所以此时isInterrupt()都返回false查看全部
-
java.lang/thread/ctrl +f/interrupt: 作用:中断线程 interrupt status:中断状态 如果一个线程因为调用join,sleep方法,阻塞的情况下,中断状态会被清除。查看全部
-
interrupt方法:查看全部
-
如何停止进程:设置退出标志查看全部
-
注意:stop方法不应该出现,当线程强行stop之后,程序会突然终止查看全部
-
stop()方法本身是Java1.0版本提供的一个停止线程的方式。 官方标注为:Deprecated。所以对我们来说不是一个正确的停止线程的方式。查看全部
-
join方法可中断其它线程的执行,等待调用join方法的线程结束,即使是主线程main也会被中断 join()的作用是:“等待该线程终止”,这里需要理解的就是该线程是指的主线程等待子线程的终止。也就是在子线程调用了join()方法后面的代码,只有等到子线程结束了才能执行。查看全部
-
valatile保证了线程可以正确的读取其他线程写入的值查看全部
-
同步的实现:wait()/notify()/notifyAll() 都为object对象。查看全部
-
锁:private final Object lockObj = new Object(); synchronized(lockObj)实现互斥查看全部
-
进程:是程序的执行过程,持有资源(内存) 线程:进程中的一个任务查看全部
举报
0/150
提交
取消