死磕Java多线程(一)---线程的简单介绍

引言

以前对多线程的认识就只有new Thread 或 实现一个runnable接口,简单用用互斥锁(synchronized),线程间的通信(wait/notify)就没了,最近在复习多线程,就去网上看看大佬们的博客,才发现自己真的是井底之蛙,多线程都没入门,所以最近在拼命学习多线程,顺便总结一下,方便以后复习。。。。

1. 线程的实现

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.线程的六种状态

在这里插入图片描述

3.多线程的优点

更好的资源利用
在某些场景下程序的设计会更简单
提升程序的响应性

4.多线程的缺点

设计更复杂:
一般多线程程序比单线程程序的设计要复杂。在多线程访问共享数据的时候,这部分代码需要特别的注意。线程之间的交互往往非常复杂。不正确的线程同步产生的错误非常难以被发现,并且重现以修复。

上下文切换的开销:
当CPU从执行一个线程切换到执行另外一个线程的时候,它需要先存储当前线程的本地的数据,程序指针等,然后载入另一个线程的本地数据,程序指针等,最后才开始执行。这种切换称为“上下文切换”(“context switch”)。CPU会在一个上下文中执行一个线程,然后切换到另外一个上下文中执行另外一个线程。上下文切换并不廉价。如果没有必要,应该减少上下文切换的发生。

增加资源消耗:
线程在运行的时候需要从计算机里面得到一些资源。除了CPU,线程还需要一些内存来维持它本地的堆栈。它也需要占用操作系统中一些资源来管理线程。我们可以尝试编写一个程序,让它创建100个线程,这些线程什么事情都不做,只是在等待,然后看看这个程序在运行的时候占用了多少内存。

5.如何使用Java创建多线程

  1. 继承Thread类,重写run方法
  2. 把相关的类实现Runnable(可运行)接口,重写run方法。
  3. 实现Callable接口(相对用得较少)
  4. 使用线程池
发布了45 篇原创文章 · 获赞 3 · 访问量 2327

猜你喜欢

转载自blog.csdn.net/weixin_44046437/article/details/99099183