-
Thread常用方法查看全部
-
Thread常用方法查看全部
-
ava memory mode描述了java线程如何通过内存进行交互 线程的互斥 sychronized 线程的同步 wait notifyall notify 多线程编程常用的交互模型: 1、生产者 -- 消费者模型 2、读写锁模型 3、future模型 并发编程工具: 1、java.util.concurrent 2、线程池ExcuterService 3、Callable Furure 4、BlockingQueue 4、worker thread模型查看全部
-
一、互斥 1、同一时间,只能有一个线程访问数据 二、同步 1、是一种通信机制,一个线程操作完成后,以某种方式通知其他线程 三、实现方法 1、【互斥】构建锁对象(Object objLock),通过synchronized(lockObj){ 互斥的代码块 } 2、加锁操作会开销系统资源,降低效率。 3、在某线程的条件不满足任务时,使用lockObj.wait()对线程进行阻挡,防止其继续竞争CPU资源,滞留在wait set中,等待唤醒,【唤醒后继续完成业务】 4、【同步】在某一代码正确执行完业务后,通过lockObj.notifyAll()唤醒所有在lockObj对象等待的线程查看全部
-
wait set -- 线程的休息室 Critical Section 共享资源/共享数据 --- 临界区 当现在有一个线程需要访问共享资源的时候 首先,需要获得锁,当它获得了锁之后将进入临界区进行操作 操作过程中,如果它发现某些情况不被满足(条件不满足无法执行) 它将调用锁对象上的一个wait方法,此时这个线程首先会释放掉锁资源,然后进入到锁对象上的wait set 由于这个线程释放掉了锁资源,使得其他线程可以有机会来竞争这个临界资源 所以其他的线程获得了锁并且进入到临界区域,同时在锁对象上的等待集合中有多条线程在等待条件的满足 当当前运行线程执行完某些操作,需要通知等待的线程时,它调用notify()方法,将会唤醒锁资源所持有的等待集合中一条线程(随机唤醒,由底层算法实现的,无法控制) 使这条线程有机会竞争CPU资源 或者,当当前运行线程调用了notifyAll()方法,将会使当前锁对象上的等待集合中的全部线程都被唤醒,从而有机会在当前线程离开并释放了锁之后,竞争这个临界资源的锁对象查看全部
-
Java线程——线程交互——争用条件 1、当多个线程同时共享访问同一数据(内存区域)时,每个线程都尝试操作该数据,从而导致数据被破坏(corrupted),这种现象称为争用条件 2、原因是,每个线程在操作数据时,会先将数据初值读【取到自己获得的内存中】,然后在内存中进行运算后,重新赋值到数据。 3、争用条件:线程1在还【未重新将值赋回去时】,线程1阻塞,线程2开始访问该数据,然后进行了修改,之后被阻塞的线程1再获得资源,而将之前计算的值覆盖掉线程2所修改的值,就出现了数据丢失情况查看全部
-
第三:线程常用方法 1.获取线程名称:getName(); 2.取得当前线程对象:currentThread(); 3.判断是否启动:isAlive(); 4.加入运行:join();在某方法后加入一个新线程,方法执行完后再执行新线程 5.线程休眠:sleep(); 6.线程礼让:yield();让线程根据优先级再进行“抢”查看全部
-
1.Interrupted 相当于 旗标 (isInterrupted ==>true flase) 2.线程中使用 sleep等方法造成线程堵塞时, 标志位被清除,Interrupted方式无效 抛出InterruptedException(中断异常) interrupt方法是用来唤醒被阻塞的线程的,如果线程使用了wait, sleep, join方法,那么线程就会进入阻塞状态,使用interrupt方法会终止这种状态,此时线程的sleep等方法下面的catch语句就会接收到这个打断,从而启动线程,继续做要做的事情。如果线程在阻塞之前使用interrupt方法,那么在阻塞的时候,会抛出异常,并把中断标志位设置成false。 一、错误一:stop()方法 1、not stop:stop()方法会使线程戛然而止 2、使程序突然中止,无法完成完整的业务步骤,也无法进行清理工作 二、错误二:interrupt()方法 1、interrupt()方法只能设置interrupt标志位(且在线程阻塞情况下,标志位会被清除,更无法设置中断标志位),无法停止线程 三、正确方法:设置退出标志 1、使用退出标志位来停止while循环 2、完成最后一次业务后跳出while循环后,之后进行一些清理工作查看全部
-
1.不要使用stop()方法来停止线程,这种对资源没有进行清理就直接关闭造成不稳定; 2.使用volatile来修饰一个标识变量,这个修饰符的作用能让其它线程对该值的操作能写入,以正确同步状态;通过修改该变量来关闭线程,有利于对线程占用的资源进行清理或完整执行线程逻辑查看全部
-
stop方法使得线程戛然而止,完成了什么工作,哪些工作还没有做,都不知道,且清理工作也没有做,所以不是正确的停止线程方法 正确的停止线程方法是,在线程执行中设置状态标识,通过控制标识来控制线程正常完整的执行结束线程 volatile是保证所有子线程里的变量都能同步到主内存里变量的值 不要用stop()方法结束线程查看全部
-
Thread.sleep(millis); 使当前线程休眠,单位毫秒 join()会阻塞其他线程,让调用这个方法的线程先执行完 yield()会让出cpu调度权,把下次调度机会让给其他线程 volatile关键词,多个线程操作同一变量更安全查看全部
-
Java Thread常用方法查看全部
-
截图1查看全部
-
thread常用方法查看全部
-
Thread查看全部
举报
0/150
提交
取消