《Java编程思想》学习笔记(第二十一章):并发

来源:互联网 发布:centos 7 阿里云 编辑:程序博客网 时间:2024/05/17 22:11

并发的解决的问题:

  • 速度

  • 设计可管理性

更快的执行

  • 并发可以提高在单处理器上的程序性能;

  • 实现并发最直接的方式是在操作系统级别使用进程

    • 周期性的将CPU从一个进程切换到另一个进程;
    • 但是JAVA使用的并发系统会共享内存和I/O这样的资源,所以必须要协调不同驱动线程任务对这些资源的使用;

线程机制

  • 机制:切分CPU时间,子线程都能分配到一定的时间执行任务;
  • 好处:CPU的个数可以任意扩展,与实际的线程代码运行无关;

Thread

  • 让步:Thread.yield():在run()方法中调用Thread.yield()方法是对线程调度器的一种建议;
    • 线程调度器:Java线程机制的一部分,可以将CPU从一个线程转移给另一个线程;
    • 暗示可以交给别的同样优先级的线程运行;
    • 可以看到任务换进换出的证据;
  • 执行:run():导出Runnable类的时候必须要有一个run()方法,这个方法不会产生任何内在的线程能力,要实现线程行为,必须显示的将一个任务附着到线程上;
  • 优先级

    • 设置优先级:在run()方法的开头处,Thread.currentThread().setPriority(int priority) ;
    • 实际原理:提高频率(实际优先分配时间片);
    • 常用级别:MAX_PRIORITY,NORM_PRIORITY,MIN_PRIORITY;
  • 后台线程(daemon)

    • 定义:程序在运行的过程中在后台提供的一种通用服务的线程,这种线程并不能成为程序不可获取的部分;
    • 理解:如果非后台线程死了,那么后台线程也就会被杀死;
    • 设置:在启动(start())方法之前,调用threadSymbol(实现了runnable接口的一个线程实例).setDaemon(true);
    • 判断:isDaemon();
  • 加入一个线程(join)

    • 定义:如果一个线程在另一个线程t上调用t.join(),那么次线程将被挂起,知道目标线程t结束后才恢复;
    • 理解:有A和B两个线程,如果A线程在run()方法中,调用了B.join(),意思就A线程跑在路上的时候,把B线程的任务给加进来了,那么就只能等着B跑完然后A接着跑。但是呢,如果想强制中断也可以啊。直接掉B.interrupt()方法中断掉B线程,但是记得try-catch;
    • +
0 0