java多线程
不会写代码的菜
这个作者很懒,什么都没留下…
展开
-
Java 线程的通信问题
1.什么是线程通信?线程的通信即线程的交流2.线程通信涉及到的3个方法1.wait()//一旦执行此方法,线程进入阻塞状态,并释放同步监视器2.nitify()//一旦执行此方法,就会唤醒被wait的一个线程;如果有多个线程都等着被唤醒,则优先唤醒优先级高的那个线程3.notidyAll()//一旦执行到此方法,就会唤醒所有被wait的线程3.说明;1.wait(),notify(),notifyAll()必须使用在同步代码块或同步方法中2.这三个方法的调用者必须原创 2021-12-13 20:10:47 · 97 阅读 · 0 评论 -
Java 多线程的综合运用
栗子:实现目标: 生产者/消费者问题 此题目需实现一个生产者,店员,消费者之前程序.生产者生产产品,生产好之后交给店员,店员只能持有固定数量的产品,店员与生产者之间保持信息交流,即店员持有的产品数量小于所需持有的固定数量时,生产者开始生产产品至固定数量而后停止生产;消费者与店员之间也保持信息交流,消费者每消费一个产品,店员持有的产品数量减少相应的数目,如此往复循环分析问题: 1.是否是多线程? 是,生产者线程,消费者线程 2.是否存在线程安全问题(是否共享数据)? 是...原创 2021-12-13 20:11:09 · 216 阅读 · 0 评论 -
Java 线程的创建方式四--使用线程池
1.线程池的使用背景:经常创建和销毁线程,及使用量特别大的资源,比如并发情况下的线程,对计算机性能影响特别大,这时就需要一个能存储这些经常使用的线程的东西,线程池因用而生2.线程池的实现思路: 提前创建好多个线程,放入线程池中,使用时直接获取,使用后放回池中 可以避免频繁创建和销毁线程,实现重复利用(类似生活中的公共交通工具,使用时借用一下,使用后放回规定地方,无需自己创建一个) 3.使用线程池的好处: 提高响应速度(减少了创建新线程的时间) 降低资源消耗(重复利原创 2021-12-11 16:18:43 · 426 阅读 · 0 评论 -
Java 线程的创建方式三--实现Callable接口
新增的线程创建方式(JDK5.0及以后)实现Callable接口 与使用Runnable接口相比,Callable接口功能更加强大 相比run()方法,call()方法可以有返回值 call()方法可以抛出异常,从而被外界操作捕获 支持泛型的返回值 需要借助FutureTask类,比如获取返回结果 Future接口 可对具体Runnable,Callable任务的执行结果进行取消,查询是否完成,获取结果等原创 2021-12-10 22:42:34 · 100 阅读 · 0 评论 -
Java 线程的死锁问题
一.什么是死锁? 不同线程分别占用对方需要的同步资源不放弃,都在等在对方放弃自己所需要的同步资源,就形成了线程的死锁,这时程序也不会报错,只会停在出现死锁的位置,不再往下执行比如: 两个人在吃饭,饭桌上只有一个两根筷子,这时两个人各拿了一根筷子,都在等待对方放下另外一根,结果谁也吃不到饭二.说明: 出现死锁问题后,不会出现异常,不会出现提示,只是所有的线程都处于阻塞状态,无法继续执行三.我们在编写程序时要避免死锁问题 不是说程序执行完了,就一定不存在死锁问题...原创 2021-12-09 23:08:33 · 341 阅读 · 0 评论 -
Java 解决线程安全的方式三--Lock(锁)
Lock(锁)一.什么是lock? 从JDK5.0开始,Java提供了更强大的线程同步机制--通过显示定义同步锁对象来实现同步,同步锁使用lock对象充当 java.util.concurrent.lock.Lock 接口是控制多个线程对共享资源进行访问的工具 锁提供了对共享资源的独占访问,每次只能有一个线程对lock对象加锁,线程开始访问共享资源之前应先获得lock对象 二.如何实现lock锁? ReentrantLock类实现了Lock,它拥有与synchro..原创 2021-12-09 23:07:33 · 197 阅读 · 0 评论 -
Java 线程的安全问题及解决方式
线程的安全问题一.问题提出: ①多个线程执行的不确定性引起执行结果不稳定 ②多线程对数据的共享,造成操作不完整性,破坏数据 某个执行中的线程操作过程中,尚未完成相关操作时,其他线程参与进来也执行相同的操作,这时就会出现线程安全问题二.如何解决? 当一个线程a在操作共享数据时,使其他线程不能参与进来,直到a的相关操作完成时,其他线程才可以操作,即使a被阻塞,也不能被改变 在java中通过同步机制来解决线程安全问题三.解决线程安全问题的方式:方式一:...原创 2021-12-09 23:06:43 · 1431 阅读 · 0 评论 -
线程的生命周期[详解]
线程的生命周期新建: 当一个Thread类继承其子类的对象被调用声明并创建时,新生的线程对象处于新建状态就绪: 处于新建状态的线程被start后,将进入线程的队列等待cpu时间片,此时已具备运行条件,只是未分配到cpu资源运行: 当就绪的线程被调度并匹配到cpu资源,进入运行状态,run()方法中定义了线程的相关操作和功能阻塞: 在某种情况下,被人为挂起或执行输入操作时,让出cpu并临时中止自己的执行死亡: 线程完成了它全部的...原创 2021-12-07 00:23:46 · 141 阅读 · 0 评论 -
Java 线程的调度及优先级问题
一.线程的调度有两种调度策略: ①时间片策略在非常短时间内迅速切换执行不同线程 ②抢占式策略高优先级线程抢占cpu二.线程的优先级1.线程的优先级等级: MAX_PRIORITY:10 NORM_PRIORITY:5 MIN_PRIORITY:12.如何获取和设置当前线程的优先级:getPriority(): 获取setPriority(int p):设置h1.setPriority(Thread.MAX_PRIORITY);h...原创 2021-12-05 17:45:31 · 645 阅读 · 0 评论 -
如何区分单核与多核cpu及理解并行与并发
一.单核cpu和多核cpu的区分:1.单核cpu: 实际上是一种假的多线程,因为在同一时间单元内 ,只能执行一个线程任务,只不过在非常短时间内迅速切换执行不同线程,让人误认为是在同时执行多个线程2.多核cpu: 可同时执行多个线程,更好的发挥多线程的效率3.一个java应用程序(java.exe),其至少有三个线程: main()主线程 gc()垃圾回收 异常处理 二.并行与并发的区别:1.并行: 多个cpu同时执行多个任务,大大提升...原创 2021-12-05 17:44:54 · 3648 阅读 · 0 评论