黑马程序员-线程总结

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

一、

1. 进程

  进程是应用程序在运行时期,所占用的内存空间

 

2. 线程

  对CPU的一条独立的执行路径,独立的,分别被CPU执行

  看成是一个大的应用程序中的小程序

  好处,充分利用CPU的资源

 

3. 创建线程第一种方式

  线程也是对象,线程对象的描述类 java.lang.Thread

l 定义类,继承Thread

l 子类重写Thread类的run方法

l 建立Thread子类对象

l 调用子类对象中的方法start()开启线程

 

4. 多线程的随机性

  程序两个执行路径,一个执行main 另一个执行线程方法runCPU自己选择执行哪一个路径,线程的随机性

  JVM本身是单线程程序还是多线程程序--多线程程序

 

5. 状态图--必须自己会画

 

6. 获取设置线程的名字

  Thread-0编号来命名

  Thread类方法,返回String getName()线程的名字

  不是Thread子类中,获取线程名字

  Thread类的静态方法  static Thread currentThread(); 返回当前运行的线程对象

 

 设置名字:方法setName(String s)

           构造方法Thread(String name);

 修改线程名字一般情况下意义不大

 

7. 多线程的案例

  引出来线程创建的第二种方式

  多线程操作共享数据的安全隐患

  
  多线程模拟售票,设定车票100张,4个窗口一起销售

  发现每一个窗口自己卖自己的,不是共享数据,保证多个窗口出售的必须是共享的票源,可以使用静态修饰,引出创建线程的第二种方式

 

8. 创建线程的第二种方式

l 定义类实现Runnable接口

l 重写接口中的方法run

l 创建Thread类对象,传递Runnable接口的实现类对象

l 调用Thread类的方法start()开启线程

    两种创建线程的区别在哪里

        A  单继承,局限性,多实现避免了单继承局限性

        B  继承方式,数据每个线程独享,实现接口方式,数据所有线程共享

 

9. 线程安全隐患

  多线程同时操作共享数据,出现安全隐患

  解决办法:一个线程操作共享数据没有操作完成,其他线程不能操作

  同步技术:保证共享数据只有一个线程在操作。

  同步代码块 格式:

      synchronized(任意对象){

               线程操作的共享数据

      }

 任意对象:对象监视器,对象锁。

 同步原理,线程进入同步代码块执行后,获取到了监视器,锁,没有锁的线程挡在同步以外,在同步中的线程执行完毕后,释放了这个锁,其他线程才可以进来执行

 

 加上同步后,数据安全了,但是运行效率下降,在安全和速度的选择上,重点选择安全性

 

10. 多线程模拟存钱效果 -- 方法的同步

  储户去银行存钱  两个窗口,每个存3次,每次存100

  存钱的方法是银行,储户建立银行对象,调用银行的存钱方法

  发现add方法中,所有的程序都是线程的共享数据,可以不可以同步这个方法呢

  以后,如果方法中的全部代码,都是线程的共享数据,可以同步整个方法,没有必要写同步代码块.

l 同步方法中的this就是锁

l 静态方法中的锁,是本类的class文件对象,数据类型.class静态成员变量,返回这个类的class文件对象  类名.class就可以了

 

11. 单例设计模式Single

  设计思想,保证对象的唯一性 class A{}  new A()  new A()

   建立对象,调用类的构造方法,类私有了构造方法

  实现步骤:

l 私有构造方法

l 成员位置创建自己的本类对象

l 提供公共方法,返回创建的对象

    多线程并发访问懒汉式的方法getInstance()获取对象,输出对象,哈希值不是唯一

    采用判断if两层,加上同步,保证了程序的安全性和执行效率,这个案例必须会写!

 

12. 死锁

  程序出现的一种假死现象,多线程争抢同一把锁,造成的程序假死现象。在实际的项目中不会出现,但是面试中出现的,死锁现象出现在同步代码块的嵌套形式。考察目的是看程序人员对同步的原理是否理解。

 

13.  wait sleep 方法区别

 sleep 方法是Thread类的

 wait  方法是Object

 

sleep 不放锁

wait  放锁,唤醒后,重新获取锁才能运行

 

 

15.  JDK5新特性,锁 java.util.concurrent.locks;

  接口Locklock()  unlock() 替代了 synchronized同步操作。锁定操作更加的灵活广泛。

  使用实现类 ReentrantLock.

  接口Condition,替代了Object类的方法 wait    notify   notifyAll

                                     await    signal   signalAll

  在接口Lock中,有一个方法 newCondition()返回了,Condition接口的实现类对象

 

16.  停止线程运行的方式

  Thread类方法Stop不用

  结束线程的根本是结束run方法

l 将循环变量设置为,可更改

l 异常停止  Thread类的方法 interrupt()中断线程

 

二、

1. 多线程的其他方法--toString()

  返回线程的字符串表现形式,线程名字,优先级,线程组

  优先级,分成三个级别  最大,默认,最小

  setPriority(int num) 参考Thread类的静态常量

 

2. 守护线程 setDaemon

  方法中传递布尔值,如果是true,这个线程是守护线程

  圣斗士星矢 就是  智慧女神雅典娜(Athena)的守护线程

 

3. 定时器

  可以让程序,定时运行,间隔一定的时间(毫秒)

  java.util.Timer类,构造方法中,不要设置为守护线程

 

4. join方法

  等待该线程终止,执行join的方法,的线程,会全部优先执行完毕,剩余的线程,争夺CPU的资源

 

5. static yield

  线程的让步,执行到这个线程的yield方法的时候,将CPU的执行权让给别的线程来执行。

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值