1、什么是线程
线程是操作系统调度的最小单元,也叫轻量级进程。它被包含在进程之中,是进程中的实际运作单位。同一进程可以创建多个线程,每个进程都有自己独立的一块内存空间。并且能够访问共享的内存变量。
2、线程的状态
线程的状态一般看到的也就是Runable 和blocked ,最多的还是blocked,因为cpu的时间片很短,切换的很快等待IO,等待临界资源。大概知道就好
3、怎么通俗理解进程,线程?
举个例子,开了一家餐厅,餐厅这个实体就是进程,餐厅里的服务员就是线程,餐厅里的座位就是资源(游戏内的数据),所有的服务员都可以安排客人就座,多个服务员安排座位就是多线程竞争,锁也就是去排号。线程池就是有多个服务员一直站在那里等着被呼叫。
4、线程和进程的区别
进程它是具有独立地址空间的,优点就是隔离度好,稳定,因为它是操作系统管理的,进程和进程之间是逻辑隔离的,只要操作系统不出问题的话,一个进程的错误一般不会影响到其它进程,缺点就是信息资源共享麻烦。而线程只是进程启动的执行单元,它是共享进程资源的,创建销毁、切换简单,速度很快,占用内存少,CPU利用率高。但是需要程序员管控的东西也比较多,相互影响出问题的机率较大,一个线程挂掉将导致整个进程挂掉,所以从程序员的角度来讲,我们只能看到某种代码是线程安全的,而没有说进程安全的。
5、什么是线程安全
在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。
类比:在餐厅里,每个服务员都有一份自己排号,比如我刚刚安排了一个人去坐在8号座,那我想当然的以为是下一个是9号座,如果另外一个服务员同时安排了9号桌,我再去安排就会造成数据不安全了,出现问题了。
6、如何创建线程
java创建线程的三种方式:
- 继承Thread类创建线程类,无法继承其他类。
- 实现Runnable接口
- 通过Callable和Future创建线程
package thread; /** * @author 香菜 */ public class ExtendThread extends Thread { @Override public void run() { System.out.println("ExtendThread");; } }
package thread; import java.util.concurrent.Callable; /** * @author 香菜 */ public class ImpCallable implements Callable<Integer> { @Override public Integer call() throws Exception { System.out.println("Callable "); return 1; } }
package thread; /** * @author 香菜 */ public class ImpRunnable implements Runnable { @Override public void run() { System.out.println("Runnable"); } }
package thread; import java.util.concurrent.FutureTask; /** * @author 香菜 */ public class Aain { public static void main(String[] args) { new ExtendThread().start(); new Thread(new ImpRunnable()).start(); new Thread(new FutureTask<>(new ImpCallable())).start(); } }
总结:
线程的概念来自于生活,理解了概念,在项目中思考的时候只要搞清楚项目的线程模型,基本上不会遇到太大的问题。
本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注自学编程网的更多内容!
- 本文固定链接: https://zxbcw.cn/post/217389/
- 转载请注明:必须在正文中标注并保留原文链接
- QQ群: PHP高手阵营官方总群(344148542)
- QQ群: Yii2.0开发(304864863)