java 线程学习-课前须知

问题一:进程与线程的区别?什么是进程?什么是线程?

       进程:程序的执行过程。进程持有资源(共享内存,共享文件)和线程。这里的资源就是内存,程序是要从内存中读取数据来运行的,所以每个程序运行时都会被分配内存。使用进程最常见的例子就是我们可以同时打开LOL和QQ。可以在电脑的资源管理器来查看这两个进程,值得注意的是进程是属于操作系统的。

       线程:是程序执行流的最小单元。同一个进程中可以有多个线程。线程共享进程的资源。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。比如你在跟别人QQ视频的时候还可以文字聊天。

线程与进程的区别可以归纳为以下4点:
1)地址空间和其它资源(如打开文件):进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。
2)通信: 进程间通信 IPC ,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要 进程同步 和互斥手段的辅助,以保证数据的一致性。
3)调度和切换:线程上下文切换比进程上下文切换要快得多。
4)在多线程OS中,进程不是一个可执行的实体。

       进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其他进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈个局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。

      但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

问题二:线程的生命周期有哪些?

1. 创建状态

实例化Thread对象,例如:Thread tt = new Thread()  但没有调用start()方法时的状态

2. 就绪状态

当程序调用start()方法后,此时线程位于就绪状态池中,等待获取CPU的使用权。  线程有资格运行,但调度程序还没有把它选为运行线程时所处的状态。

3. 运行状态

从就绪状态池中被选择为当前执行的线程所处的状态。

4. 阻塞状态

线程依然是活的,但是缺少运行的条件 ,一旦具备了条件,就可以转化为就绪状态(不能直接转为运行状态)。

5. 死亡状态

一个线程的run()方法运行结束,那么该线程完成其使命,他的栈结构将解散,也就是死亡了。但是他任然是一个Thread()对象,任然可以被引用,这一点与其他对象一样,而且被引用的对象也不会被垃圾回收器回收。一旦线程死去,他就永远不能重新启动了,也就是说不能再用start()方法让它运行。

问题三:线程的交互方式是什么?

互斥:比如我所在的实验室就是一个进程,实验室中的每一个同学就是一个线程。实验室有一台打印机(属于进程资源),同学们在使用实验室的公共物品打印机(进程中的共享资源)的时候就会互斥,王同学说:我明天交实训报告,打印机应该我使用。李同学不服:刘老师现在问我要出勤名单,打印机必须我先使用。打印机在使用的时候只能一个一个来,一个同学在使用,那么其他人必须等待。这就是互斥。

同步:比如实验室每两周要卫生大扫除,实验室所有同学必须配合起来,齐心合力才能完成大扫除任务。这就是同步。

问题四:线程类Thread常用的方法

线程类Thread和线程接口Runnable都在Java.lang包下面,他们都有一个共同的run()方法。
下面是Thread类的常用方法






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值