《Java多线程系列一》线程是什么?怎么理解多线程!学不会就是我笨!

举报
香菜聊游戏 发表于 2021/07/14 22:58:04 2021/07/14
【摘要】 目录   1、什么是线程 2、线程的状态 3、怎么通俗理解进程,线程? 4、线程和进程的区别 5、什么是线程安全 6、如何创建线程 1、什么是线程 线程是操作系统调度的最小单元,也叫轻量级进程。它被包含在进程之中,是进程中的实际运作单位。同一进程可以创建多个线程,每个进程都有自己独立的一块内存空间。并且能够访问共享的内存变量。 2、线程的状...

图片

目录

 

1、什么是线程

2、线程的状态

3、怎么通俗理解进程,线程?

4、线程和进程的区别

5、什么是线程安全

6、如何创建线程


1、什么是线程

线程是操作系统调度的最小单元,也叫轻量级进程。它被包含在进程之中,是进程中的实际运作单位。同一进程可以创建多个线程,每个进程都有自己独立的一块内存空间。并且能够访问共享的内存变量。

2、线程的状态

线程的状态一般看到的也就是Runable 和blocked ,最多的还是blocked,因为cpu的时间片很短,切换的很快等待IO,等待临界资源。大概知道就好

图片

3、怎么通俗理解进程,线程?

举个例子,开了一家餐厅,餐厅这个实体就是进程,餐厅里的服务员就是线程,餐厅里的座位就是资源(游戏内的数据),所有的服务员都可以安排客人就座,多个服务员安排座位就是多线程竞争,锁也就是去排号。线程池就是有多个服务员一直站在那里等着被呼叫。

图片

4、线程和进程的区别

进程它是具有独立地址空间的,优点就是隔离度好,稳定,因为它是操作系统管理的,进程和进程之间是逻辑隔离的,只要操作系统不出问题的话,一个进程的错误一般不会影响到其它进程,缺点就是信息资源共享麻烦。而线程只是进程启动的执行单元,它是共享进程资源的,创建销毁、切换简单,速度很快,占用内存少,CPU利用率高。但是需要程序员管控的东西也比较多,相互影响出问题的机率较大,一个线程挂掉将导致整个进程挂掉,所以从程序员的角度来讲,我们只能看到某种代码是线程安全的,而没有说进程安全的。

5、什么是线程安全

在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。

 

图片

类比:在餐厅里,每个服务员都有一份自己排号,比如我刚刚安排了一个人去坐在8号座,那我想当然的以为是下一个是9号座,如果另外一个服务员同时安排了9号桌,我再去安排就会造成数据不安全了,出现问题了。

6、如何创建线程

java创建线程的三种方式:

  1.  继承Thread类创建线程类,无法继承其他类。

  2.  实现Runnable接口

  3.  通过Callable和Future创建线程


  
  1. package thread;
  2. /**
  3. * @author 香菜
  4. */
  5. public class ExtendThread extends Thread {
  6. @Override
  7. public void run() {
  8. System.out.println("ExtendThread");;
  9. }
  10. }

  
  1. package thread;
  2. import java.util.concurrent.Callable;
  3. /**
  4. * @author 香菜
  5. */
  6. public class ImpCallable implements Callable<Integer> {
  7. @Override
  8. public Integer call() throws Exception {
  9. System.out.println("Callable ");
  10. return 1;
  11. }
  12. }

  
  1. package thread;
  2. /**
  3. * @author 香菜
  4. */
  5. public class ImpRunnable implements Runnable {
  6. @Override
  7. public void run() {
  8. System.out.println("Runnable");
  9. }
  10. }

  
  1. package thread;
  2. import java.util.concurrent.FutureTask;
  3. /**
  4. * @author 香菜
  5. */
  6. public class Aain {
  7. public static void main(String[] args) {
  8. new ExtendThread().start();
  9. new Thread(new ImpRunnable()).start();
  10. new Thread(new FutureTask<>(new ImpCallable())).start();
  11. }
  12. }

总结:线程的概念来自于生活,理解了概念,在项目中思考的时候只要搞清楚项目的线程模型,基本上不会遇到太大的问题。下期写下future,好了,我继续刷题去了。

打字不容易,点赞,转发,关注三连,谢谢大家,对了,关注我公众号:【香菜聊游戏】有更多福利哦。常规福利双手送上。

图片

先学会这些调试技巧,再写代码,效率提高十倍。吐血整理!

文章来源: gamwatcher.blog.csdn.net,作者:香菜聊游戏,版权归原作者所有,如需转载,请联系作者。

原文链接:gamwatcher.blog.csdn.net/article/details/114580320

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。