
java多线程
大百求知路
这个作者很懒,什么都没留下…
展开
-
临界区与竞态条件
临界区 概念:一段代码块内如果存在对共享资源的多线程读写操作,称这段代码块为临界区。 例如: static int counter = 0; static void increment() //临界区 { counter++; } static void decrement() //临界区 { counter–; } 容易出现的问题:多个线程访问共享资源,在对共享资源进行读写操作时易发生指令交错,就会出现问题。 解决方法:synchronized,即俗称的对象锁,它采用互斥的方式让同一时刻至多只有一个线程能原创 2021-10-17 20:54:02 · 200 阅读 · 0 评论 -
Interrupt()多线程设计模式之两阶段终止模式
两阶段终止模式(Two Phase Termination) 1.概念:在一个线程T1中如何“优雅”终止线程T2?这里的【优雅】指的是给T2一个料理后事的机会。 2.图解: 3.对图进行解释:就是在一个线程执行while()循环时,第一个阶段终止是调用isInterrupt()方法看有没有被打断,如果打断,那就料理后事结束循环;如果没有被打断,第二个终止阶段就是监控线程睡眠2秒后看有无异常,没有异常就执行监控记录,有异常就设置打断标记,返回while循环继续判断打断标记,然后继续上述循环。 4.适用场景:原创 2021-10-17 16:39:30 · 150 阅读 · 0 评论 -
interrupt()方法理解和实例
本文主要讲interrupt方法的用途和用法,还请大家往下看。 jdk中的描述是这样的: interrupt():中断这个线程。 除非当前线程中断自身,这是始终允许的,所以调用此线程的checkAccess方法,这可能会导致抛出SecurityException 。 如果该线程阻塞的调用wait() , wait(long) ,或wait(long, int)的方法Object类,或者在join() , join(long) , join(long, int) , sleep(long) ,或sleep(l原创 2021-10-16 18:25:14 · 1052 阅读 · 0 评论 -
yield()和sleep()的区别
sleep() 1.调用sleep()会让当前线程从running转换到timed wating(阻塞) 2.其他线程可以使用interrupt方法打断正在睡眠的线程,这时sleep()方法会抛出InterruptException 3.睡眠结束后的线程未必会立刻得到执行(还得看操作系统的任务调度器) 4.建议使用timeUnite来代替Thread的sleep来获得更好的可读性 yield 1.调用yield会让当前线程从running(运行状态)转换为runnabled(就绪状态),然后调度执行其他线程原创 2021-10-09 21:07:30 · 313 阅读 · 0 评论 -
线程中常见方法的描述
本文主要介绍一下线程中常见方法的描述和注意事项,写的有错误的地,还望读者私信指出 start(): 功能说明:启动一个新的线程,在新的线程中运行run方法的代码。 注意:start()方法只是让线程就绪,里面的代码不一定立刻执行,能不能执行还得看操作系统任务管理器的调用。每个线程对象的start()方法只能调用一次。 run() 功能说明:新线程启动后会调用的方法 注意:如果在创建Thread对象时传入了runnable参数,则会执行runnable中的run方法;如果没传入,则默认不执行;可以创建thre原创 2021-10-09 16:42:47 · 109 阅读 · 0 评论 -
创建线程的3个方法
本文谈一谈创建线程的3个方法,看下文 方法1:直接使用Thread //创建线程对象 Thread t = new Thread(){ public void run(){ //要执行的任务 } }; //启动线程 t.start(); 方法二:使用Runnable配合Thread,目的是把【线程】和【任务】分开 Runnable runnable = new Runnable(){ public void run(){ //要执行的任务 } }; //创建线程对象 Thread t = new Threa原创 2021-10-08 16:02:05 · 716 阅读 · 0 评论 -
进程,线程;并发和并行;同步和异步
**程序:**程序就是一个指令和数据的集合,它是静态的,就像电脑中的软件一样,都是以.exe结尾的可执行程序。 **进程:**进程是程序的实体,它是动态的。计算机内部进程之间的交流很复杂被称为(IPC - inter-process-communication),它是操作系统执行和调度的最小单位,它不是操作系统的东西,而是程序动态运行的实体。 **线程:**线程是进程中的一部分指令集,进程是由多个线程组成,它是CPU调用的最小单元。 **并发:**单核CPU执行线程在 微观看来是串行执行,宏观看来是并行执行原创 2021-10-08 14:33:27 · 86 阅读 · 0 评论