进程和线程
进程 就是操作系统中一个程序运行的周期时间 举个例子就是CPU就是一个工厂 内存就是资源 而一个进程就是一个车间 调用资源完成一系列任务 其中车间工人就相当于线程 所以说一个很明显的区别就是 一个进程包含多个线程 但是线程比进程更加轻量级 创建和销毁更加方便 开销小 如果进程一旦终止 那么其中的线程也会不复存在
再一个 在资源方面 进程拥有自己的变量资源 而线程是共享这些资源 所以线程之间的通信比进程之间的通信更加方便
多线程 就是同时进行多个任务 比如说在实际应用中 一个Web浏览器上 可以同时下载多个东西 就是多线程的运用
而当 访问的线程非常多的话 会带来高并发等问题 就是服务器内存不够无法处理请求
线程
线程的状态可以分为五种状态 1.其中为创建一个线程 2.线程达到就绪状态 3.当线程被调用的时候为运行状态 4.而当线程没有获取到资源不能运行时则为阻塞状态 5.当线程运行完毕之后 被销毁 也就是终止
线程的创建可以分为四种方式
第一种 继承Thread类创建线程 覆写run()方法实现线程操作 而启动线程不能直接创建实例然后调用run()方法 而是需要调用start()方法 如果以这个方式实现多线程的话 需要新建多个实体类对象 通过看start()源码的话 就会发现 在start方法中有个判断 只能让线程对象启动一次 而且也会发现调用的是start0本地方法(只声明而未实现) 而start0方法最终调用的还是JVM_startThread方法 而此方法调用的是run方法
第二种 实现Runnable()接口 跟第一个方法相比 解决了单继承的问题 而且Thread类中重载的构造方法可以接收runnable对象 此时也可以使用start()方法 启动线程 Runnable实现的多线程的程序类可以更好的描述出程序共享的概念
第三种 Callable接口 存在于JDK1.5之后追加的包concurrent 这个包主要是用于线程高并发编程使用的 包含很多在高并发操作中使用的类 Callable接口区别于Runnable主要是有返回值
第四种 线程池 将多个创建好的线程不销毁放在一起 通过ThreadPoolExecutor创建一个线程池 线程池可以降低资源消耗降低响应速度 提高线程的可管理性