您的位置:首页 > 编程语言 > Java开发

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:在厨房里烧水,在烧水的过程中,你可以偷摸去客厅去看个电视(非阻塞),不用跑厨房了,在客厅挺水响就行了,(异步)
              上面四个状态能完成烧水的任务
         同步是一种线程的操作,阻塞是线程的一种状态(记住这句话就行了)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐