首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2.多线程-区分线程与进程

2.多线程-区分线程与进程

作者头像
杨小杰
发布2019-07-04 16:28:24
3530
发布2019-07-04 16:28:24
举报
线程与进程

进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础,在早期面向进程设计的计算机结构中,进程是程序的基本执行实体,在当代面向线程的计算机结构中,进程是线程的容器,程序是指令数据及其组织形式的描述,进程是程序的实体。 windows中exe格式文件,就是一个程序,当运行的时候,exe指令会被加载,就会得到一个关于该exe程序的进程,状态会变成正在运行中。可以通过任务管理器,来查看进程的运行状态

线程是轻量级进程,程序执行的最小单位。进程中包括了若干个线程,举个例子:进程就是家,生活用品就是资源,一家的几个人,就是线程,可能中间会发生冲突,但大部分的时候是正常相处,其乐融融的。

线程的状态:

可在Thread.java文件中的枚举类State 中看到

 1public enum State {
 2    /**
 3     * 线程尚未启动的线程状态--》Thread t1=new Thread()
 4     */
 5    NEW,
 6
 7    /**
 8     * 可运行线程的线程状态。可运行线程中的线程
 9     *状态在Java虚拟机中执行,但它可能
10     *等待来自操作系统的其他资源
11     *处理器等--》t1.start()
12     */
13    RUNNABLE,
14
15    /**
16      *线程状态被阻塞,等待监视器锁。
17      *处于阻塞状态的线程正在等待监视器锁
18      *输入同步块/方法或
19      *调用后重新输入同步块/方法--》在执行过程中遇到了synchronized同步块,
20      *就会进入这个状态
21      *直至获取到请求的锁
22     */
23    BLOCKED,
24
25    /**
26       *等待线程的线程状态--》与TIMED_WAITING都表示等待的状态,
27       *区别是WAITING会进入一个无时间限制的等待,
28       *比如wait()在等待notify()方法,否则会一直等待
29     */
30    WAITING,
31
32    /**
33       *具有指定等待时间的等待线程的线程状态。
34       *由于调用一个线程,线程处于定时等待状态。
35       *具有指定的正等待时间的以下方法--》线程在等待唤醒,但设置了时限
36     */
37    TIMED_WAITING,
38
39    /**
40     *终止线程的线程状态。
41     *线程已完成执行--》线程结束的状态
42     */
43    TERMINATED;
44}
线程中start()方法与run()方法的区别:
 1/**
 2 * @program: designPattern
 3 * @description: 测试
 4 * @author: Mr.Yang
 5 * @create: 2018-11-17 14:35
 6 **/
 7public class Test {
 8    public static void main(String[] args) {
 9        Thread thread = new Thread();
10        thread.start();
11        thread.run();
12    }
13}

可以看到start()调用的是native-->本地方法

run()调用的是实现Runnable接口的run方法,start()与run()做的事情是不一样的。 所以如果直接调用run()方法,就相等于执行了一个普通方法而已,(本人之前对线程不太熟悉,以为两个是一样的,直至看了源码,算是我碰到的坑吧。)

默认情况情况下,Thread的run()方法什么都没有做,如果向启动线程做某事,需要实现run()方法。

另外一种实现方式

Thread的一个有参构造方法,可以传递一个Runabble接口,我们通过实现这个接口,重写Run方法,可以在线程启动的时候,做这个事情。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA知识总结与分享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 线程与进程
  • 线程的状态:
  • 线程中start()方法与run()方法的区别:
  • 另外一种实现方式
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档