JAVA中多线程小结

  1. 当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程。

  2. 并发性(concurrency)和并行性(parallel)是两个概念,并行指在同一时刻,有多条指令在多个处理器上同时执行;并发只在同一个时刻只能有一条指令执行,但多个进程指令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果。

  3. 多线程拓展了多进程的概念,使得同一个进程可以同时并发处理多个任务。线程(Thread)也被称为轻量级进程(Lightweight Process),线程是进程的执行单元.

  4. 线程可以拥有自己的堆栈,自己的程序计数器和自己的局部变量,但不拥有系统资源。

  5. 操作系统可以同时执行多个任务,每个任务就是进程;进程可以同时执行多个任务,每个任务就是线程。

  6. 进程中线程之间的隔离程度很小,他们共享内存、文件句柄和其他每个进程应有的状态。

  7. 线程共享的环境包括:进程段代码、进程的公有数据等。利用这些共享的数据,线程很容易实现相互之间的通信。

  8. JAVA使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。

  9. 不要忘了JAVA程序运行时默认的的主线程,main()方法的方法体就是主线程的线程执行体。

  10. 使用继承Thread类的方法来创建线程类时,多个线程之间无法共享线程类的实例变量。

  11. 采用Runable接口的方式创建的多个线程(同一个Runable对象包装为多线程)可以共享线程类的实例属性。

  12. 创建线程的三种方式对比:

    实现Callable接口和实现Runable接口的方式基本相同,知识Callable接口里定义的方法有返回值并且可以抛出异常,因此可以将Callable和Runable归为一种方式。他们与继承Thread方式之间的主要差别如下:

    采用接口实现方式:

    优点:线程类知识实现了接口,还可以继承其他类。这种方式下多个线程可以共享同一个对象,非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU、代码和数据分开,形成清晰地模型,较好的体现了面向对象的思想。

    缺点:编程稍稍复杂,如果需要访问当前线程,必须使用Thread.currentThread()方法。

    采用继承Thread类的方法创建多线程

    优点:编写简单,如果要访问当前线程,无需使用Thread.currentThread()方法,直接使用this即可获得当前线程。

    缺点:因为线程类已经继承了Thread类,所以不能再继续继承其它父类。

    因此,一般推荐采用实现Runable接口、Callable接口的方式来创建多线程。

13. 当主线程结束时,其他线程不收任何影响,并不会随之结束。一单子线程启动起来后,他就拥有和主线程同等的地位,不会受主线程影响。

14. 后台线程有个特点:如果所有的前台线程都死亡,则后台线程自动死亡。

15. sleep()方法用来暂停程序的执行,线程进入阻塞状态。yield()方法也是暂停程序,但他不会阻塞该线程,只是将他转入就绪状态。

16. 当使用synchronized同步时,系统自动对相关对象进行锁定,使用sleep()方法不会释放当前同步监视器。

17. 可使用ReentrantLock同步锁进行同步。

18. sleep()输入Thread类静态方法,wait()/notify()/notifyAll()属于Object类的方法,这三个方法必须由同步监视器对象来调用。调用wait()方法时当前线程会释放对该同步监视器的锁定。

19. 如果程序不使用synchronized来保证同步,而是直接使用Lock对象来同步,则系统中不存在隐式的同步监视器,也就不能使用wait()等方法进行通信。

20. JAVA还可以使用Condition/BlockingQueue进行线程通信。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值