A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 齐银春 中级黑马   /  2012-11-25 22:57  /  2040 人查看  /  3 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

多线程总结:
1,进程和线程的概念。
|--进程:
           是计算机程序在计算机里运行的一个单位
|--线程:
          是计算机进程运行里的一个单位,拥有计算机里的进程资源和内存资源。在进程运行下可以独立运行,减少了计算机里进程运行耗费大量资源的情况,提高了计算机的运行效率
2,jvm中的多线程体现。
|--主线程,垃圾回收线程,自定义线程。以及他们运行的代码的位置。
    主线程,程序一启动就开始运行,加载对象和局部成员,
    垃圾回收线程,当各种资源运行结束后,jvm会利用垃圾回收线程自动回收垃圾和各种资源。
    自定义线程,程序员在程序里自己定义的运行线程,在内存栈里运行
3,什么时候使用多线程,多线程的好处是什么?创建线程的目的?
|--当需要多部分代码同时执行的时候,可以使用。
        好处:提高了程序运行效率。
        目的,使线程并发执行,执行任务
4,创建线程的两种方式。★★★★★
|--继承Thread
  |--步骤
    1,定义基础Thread类,
    2,覆盖Thread类中的run方法。
    3,创建Thread类的子类对象,创建线程对象
    4,调用线程对象的start方法开启线程
|--实现Runnable
  |--步骤
    1,定义一个实现Runnable接口
    2,覆盖Runnable接口中的run方法。将线程要运行的代码存储到run方法中。
    3,创建该接口的子类对象。
    4,通过Thread类进行线程的创建,并肩将Runnabl接口的子类对象作为Thread累的构造函数的实参进行传递。
|--两种方式的区别?
      Thread方法需要继承Thread类,一旦继承了,由于java的单继承,子类就不能继承其他类,有局限性。  Runnable只需定义接口即可,方便,降低了程序的耦合性,和扩大了扩展性,
5,线程的5种状态。
对于执行资格和执行权在状态中的具体特点。
|--被创建:线程才开始被创建,具有执行资格,还没执行权限。
|--运行:具有执行资格和执行权线
|--冻结:释放了执行资格和执行权线
|--临时阻塞:具有cpu执行资格但没有执行权
|--消亡:线程被垃圾回收器回收
6,线程的安全问题。★★★★★
|--安全问题的原因:多线程并发执行时,相互抢占共有资源,会出现线程死锁的安全问题
   
|--解决的思想:当一个线程使用共有资源时,使其他线程无法再享有共有资源
|--解决的体现:使用synchronized锁,有同步代码块和同步函数
|--同步的前提:但是加上同步还出现安全问题,就需要用前提来思考。
     同步中应该有多个线程,而且共有同一把锁,
   
|--同步的两种表现方法和区别:
   同步代码块和同步函数,
   同步函数的写法简单,同步函数使用的锁是this,同步代码块使用的锁是任意指定的对象
|--同步的好处和弊端:
    好处,防止了安全问题,
    弊端,降低了程序运行性能,消耗资源
|--单例的懒汉式。
      在多线程并发执行是,会出现创建多个对象的情况,这样就打破了单例的模式,可以使用synchronized和双重判断来解决
      恶汉式代码:
       class Single
        {
           private static Single s=null;
           private Single(){}
           public static Single getInstance()
           {
             if(s==null)
            {
                synchronized(Single.class)
                 {
                  if(s==null)
                    s=new Single();
                  }
             }
             return s;
          }  
       }              


|--死锁。
          多个线程并发执行,共同使用共享资源,会出相互拥有资源而无法用其他线程拥有的资源,又无法释放自己的资源导致死锁。

7,线程间的通信。等待/唤醒机制。
|--概念:多个线程,不同任务,处理同一资源。
|--等待唤醒机制。使用了锁上的 wait notify notifyAll.  ★★★★★
|--生产者/消费者的问题。并多生产和多消费的问题。  while判断标记。用notifyAll唤醒对方。 ★★★★★
|--JDK1.5以后出现了更好的方案,★★★
  Lock接口替代了synchronized  
  Condition接口替代了Object中的监视方法,并将监视器方法封装成了Condition
  和以前不同的是,以前一个锁上只能有一组监视器方法。现在,一个Lock锁上可以多组监视器方法对象。
  可以实现一组负责生产者,一组负责消费者。
|--wait和sleep的区别。★★★★★
      wait可以有时间限制也可以没有时间限制,sleep必须有时间限制,
      使用wait时,线程释放了其cpu执行资格和权限,会释放锁
        sleep释放执行权限,不会释放锁。
      

8,停止线程的方式。
|--原理:
     可以使用stop方法,但已经过时
|--表现:--中断。
停止线程可以使用run方法,当线程没有了要运行的代码线程就结束了,意味着,任务结束,线程消失。一般情况下run方法中会定义循环,结束run方法,通过标记控制其中的循环就行了,如果读不到标记,线程就处于了冻结状态,可以用Thread类中的interrupt方法,清除线程中的冻结状态。

9,线程常见的一些方法。
|--setDaemon()将线程标记为守护线程
|--join();等待该线程终止
|--优先级  可以设置线程获取cpu执行权限的优先顺序
|--yield();临时暂停线程
|--在开发时,可以使用匿名内部类来完成局部的路径开辟。

点评

值得鼓励,希望以后还有这样的帖子,把后面的知识给总结了  发表于 2012-11-25 23:07

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

3 个回复

倒序浏览
值得学习ing!

点评

真早  发表于 2012-11-26 07:28
回复 使用道具 举报
总结的不错,但是不要忘了用代码把上面的知识点实现一遍。学以致用嘛~ 加油
回复 使用道具 举报
总结的很不错,值得收藏
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马