java线程基础方面的总结-多线程(一)
2018-03-28 16:16
393 查看
1: 同学,解释一下什么是线程,什么是进程,我们为什么要使用多线程
我的理解就是进程就是一段可执行的程序,而线相当于执行这段程序中一个可执行的单元接下来我们从两个方面解释为什么要使用多线程
减少响应得到时间,我们如果使用单线程的话,例如某个操作很耗时间,但它一直能够占用着cpu,这个时候下面的一个线程操作必须等待,用户得不到响应,体验肯定不是太好
有利于资源的利用率,我们现在电脑都是多核,如果使用单线程,计算机的资源得不到有效利用,浪费可耻啊,我们使用多线程能够提高CPU的利用效率
2:来,亲,解释下同步和异步的区别
哦哦,为什么有同步和异步呢,在多线程中,我们经常涉及到数据共享的问题,就是多个线程需要访问某个资源,他们需要按照某种规则来访问,确保这个资源在同一时刻只能被某个线程来使用,否者那还不GG, 为了不gg这个时候我们就需要对数据进行同步.这就是我理解同步的概念异步的话就是,每个线程能实现自给自足,线程里面包含运行时需要的数据和方法,我们不鸟其他的线程,自己干自己,不必看其他线程的状态,也不用等到其他线程输入速出才返回
同步和异步区别的话
打个比方吧,放学了,你喊去吃饭,如果我听到了,咱两个一块去吃饭,如果我没听到,你就一直喊喊,直到我告诉你说我听到了,咱两一块去吃饭,这个就是同步.异步就是,你喊我吃饭,喊过之后你自己屁颠屁颠的走了,我听见你喊我之后有可能立即走,也肯能等会再走.2.1:解释挺好的,那么咱怎么实现同步和异步的操作呢
java语言提供了synchronized关键字来实现同步(一种是同步的方法,另一种是同步代码块),异步的话我感觉多线程来解决吧(待考证)2.1.1: syschronized是怎么实现同步的呢
要想实现同步,必须获得每个线程对象的锁,获得它之后我们就可以保证在同一时刻只有一个线程进去临界区(互斥资源代码块),在这个锁被释放之前,其他线程想获得这个对象的锁,只能进去等到队列中去等着去.一直等到锁释放之后,等待队列中优先级别高的获得锁2.2:非阻塞和阻塞的区别
阻塞就是得到返回值返回之前,该线程被挂起.只有得到函数返回值之后,线程才会返回非阻塞就是,不用得到返回值,线程继续改干嘛干嘛,
2.2.1我们简单区分一下同步,异步,阻塞,非阻塞的区别
在家你妈让你烧开水,得到这个指令之后你必须行动呀,你伟大的任务可以有四种状态来完成这个
1:在厨房里面烧水,你一直在厨房里等着(阻塞),眼睛一直盯着水壶(同步) 这就叫同步阻塞
2: 在厨房中,一直在那等着(阻塞),这个时候不用盯着了,听到水壶响了(异步) ,这个时候你知道水烧开了
3 :在厨房里烧水,在烧水的过程中,你可以偷摸去客厅去看个电视(非阻塞),但你必须时不时去厨房看看水烧开了没有(轮询 检查同步结果)
4:在厨房里烧水,在烧水的过程中,你可以偷摸去客厅去看个电视(非阻塞),不用跑厨房了,在客厅挺水响就行了,(异步)
上面四个状态能完成烧水的任务
同步是一种线程的操作,阻塞是线程的一种状态(记住这句话就行了)
相关文章推荐
- Java多线程编程总结笔记——一多线程基础知识
- Java基础-23总结多线程,线程实现Runnable接口,线程名字获取和设置,线程控制,线程安全,同步线程
- Java多线程编程总结笔记——一多线程基础知识
- Java基础学习总结(68)——有关Java线程方面的面试题
- Java基础学习总结(68)——有关Java线程方面的面试题
- Java基础-23总结多线程,线程实现Runnable接口,线程名字获取和设置,线程控制,线程安全,同步线程
- Java多线程基础学习之线程的创建方式总结
- Java【多线程知识总结(2)】调用setDaemon(true)变成后台线程
- Java【多线程知识总结(8)】线程通信,wait()与notify()的运用
- Java多线程编程总结笔记——六线程的同步与锁
- IBM Java多线程 - 1. 线程基础
- Java【多线程知识总结(10)】线程通信之wait()与notify()的运用--模拟指挥官指挥2个连队交替轰炸战区
- java多线程总结二:后台线程(守护线程)
- Java【多线程知识总结(5)】比较继承Thread类创建线程和实现Runnable接口创建线程这两种方式
- Java【多线程知识总结(10)】线程通信之wait()与notify()的运用--模拟指挥官指挥2个连队交替轰炸战区<另外的写法>
- Java【多线程知识总结(4)】通过实现Runnable接口创建线程
- Java多线程编程基础之线程对象
- Java【多线程知识总结(3)】调用join()合并线程
- Java【多线程知识总结(2)】调用setDaemon(true)变成后台线程
- Java【多线程知识总结(8)】线程通信,wait()与notify()的运用