-
一个线程在阻塞状态下(例如sleep),此时interrupt的话,将会产生两个结果: 1、进程的interrupt状态被清除(cleard)而非被设置(set)。 2、sleep方法会抛出异常。查看全部
-
interrupt方法的初衷是中断线程而不是停止线程查看全部
-
线程的交互:互斥与同步 互斥:在同一时间只能有一条线程对关键数据或临界区进行操作 同步:线程之间的一种通信机制 一条线程做了一件事情,然后用某种方式去告诉其它线程:"我做完了" 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对象上等待的线程查看全部
-
进击的小x join方法可中断其它线程的执行,等待调用join方法的线程结束,即使是主线程main也会被中断 join()的作用是:“等待该线程终止”,这里需要理解的就是该线程是指的主线程等待子线程的终止。也就是在子线程调用了join()方法后面的代码,只有等到子线程结束了才能执行。查看全部
-
扩展建议等等等查看全部
-
互斥实现方式:synchronized关键字 实现锁的功能:private final Object lockObj = new Object(); synchronized(lockObj){---执行代码----}加锁操作 synchronized关键字实现互斥行为,既可以出现在方法体之上也可以出现在方法体内,以一种块的形式出现。然后通过lockObject的wait方法(注意:wait的线程被存放在wait set 中)和notifyAll方法实现同步查看全部
-
争用条件 原因: 线程1在还【未重新将值赋回去时】,线程1阻塞,线程2开始访问该数据,然后进行了修改,之后被阻塞的线程1再获得资源,而将之前计算的值覆盖掉线程2所修改的值,就出现了数据丢失情况查看全部
-
广为流传的错误停止线程的方法:interrupt() interrupt()--初衷并不是用于停止线程 在调用sleep()或者join()的时候,一旦其他线程调用interrupt(),它将会收到一个异常,这些被阻塞的线程因为某些原因需要被唤醒,比如外部发生了中断而需要响应,这时就采用抛出异常的方式来使其作出响应。总而言之,interrupt()方法并不能正确地停止进程查看全部
-
在线程中,停止线程的方法:设置旗标 使用volatile 定义boolean running=true,通过设置标志变量running,来结束线程。 如本文:volatile boolean keepRunning=true;查看全部
-
stop()方法本身是Java1.0版本提供的一个停止线程的方式。 官方标注为:Deprecated。所以对我们来说不是一个正确的停止线程的方式。 所以不能使用stop()方法来停止线程。查看全部
-
join方法可中断其它线程的执行,等待调用join方法的线程结束,即使是主线程main也会被中断 join()的作用是:“等待该线程终止”,这里需要理解的就是该线程是指的主线程等待子线程的终止。也就是在子线程调用了join()方法后面的代码,只有等到子线程结束了才能执行。查看全部
-
volatile关键字:保证了线程可以正确的读取其他线程的值,被该关键字修饰的变量a没有拷贝,保证了每一个线程对于该成员变量的值的改变都能存储到主存中,即每个线程的这个变量a的值都是一致的。因此它的性能也比synchronized要差一些。 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。查看全部
-
要读的书查看全部
-
java5中并发编程工具查看全部
-
多线程交互模型查看全部
举报
0/150
提交
取消