线程学习-1

开始补课线程,接下来会有一个系列来记录我的笔记

一、 线程(Thread)和进程(Process)

线程和进程是两个不同的概念,可以简单理解为多个线程(Thread)组成一个进程(Process)。进程之间相互隔离,而同一个进程中的线程则是资源共享的。

进程像是一个container,它中包含了一些线程。线程像是execution,它具体处理任务

线程是CPU调度的基本单位,进程则是资源分配的单位

二、 并发(Concurrency)和并行(Parallelism)

并发指的是一段时间内同时进行的任务,并行指的是严格意义上同时进行的任务。可以认为并发是逻辑上同时进行(先一后二,但间隔极短),并行是严格意义上同时进行(一二同时,没有间隔)。注意,由于Intel和超线程技术,我们并不能简单地认为几核CPU就最多可以处理几个线程。

例如对于一个8核16线程的CPU,他仅有8个物理核心(core)因此从物理上讲他只能同时处理8个并行的进程,但由于超线程技术(16线程),因此在逻辑上将可同时处理的线程增加到了16

个人认为并发数和并行数的比值可以作为衡量计算机利用cpu资源的能力的指标

三 java启动线程

用java启动线程有三种语法,分别是Runnable,Thread,Callable。其中Runnable和callable都是接口,Thread是一个类。最常用的方法是Runnable。Runnable和callable的区别是callable有返回值。

Runnable:新建一个类实现Runnable接口,并重写run方法。在另一个类中new一个Runnable对象,然后new一个Thread对象,参数为新建的Runnable对象。用new出来的Thread对象调用start方法来启动线程

Thread:   新建一个类继承Thread类,并重写run方法。在另一个类中new一个Thread对象并调用start方法

callable: 和Runnable一样

之所以更常用Runnable是因为他是接口,更灵活(一个类可以有多个接口,但只能继承一个类)

补充一下java中线程的六中状态

1 new状态,新建一个线程但并未启动

2 runnable状态,指这个线程处于运行或即将运行的状态

3 block状态(阻塞),线程正在等待进入一个同步块

4 wait状态(等待), 等待状态的线程一定需要另外一个线程来显式地唤醒(block状态的线程不需要其他线程来唤醒)

5 timewait状态,需要被另外一个线程唤醒或是停止足够长的时间(time.sleep()就是让线程进入timewait状态)

6 terminate状态(停止),一切线程最终都要被转入这个状态(运行结束或未捕获异常)

在写程序的时候,要时刻注意哪些线程被启动了

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值