首页 > 技术文章 > JAVA基础——线程

huan-guo 2018-03-12 17:54 原文

1.单线程和多线程

单线程:.一个程序 只有一条线程(主线程main)

多线程:一个程序 除了一条主线程main 以外 还拥有很多的子线程

  1. 效率高
  2. 开销少
  3. 容易调度(启用)(CPU直接调度)
  4. 高并发性

 

2.线程和进程

线程:.程序运行中的一条执行路径,是组成进程(程序)的  一个进程 必须拥有一条线程(主线程(main))

  1. 线程不能离开进程而独活
  2. 系统不为线程分配资源
  3. 多个线程共享进程的资源

进程:操作系统上运行的一个程度(可以简单的理解成一个程序)

  1. 进程是程序运行的基本单位(一个程序 必须拥有一个进程(可以拥有多个))
  2. 进程拥有独立的系统资源(系统为为其主动的分配资源 : cpu 磁盘……)

 

3.线程和进程的关系

进程:进程是线程的容器,一个进程可以拥有多个线程

线程:线程是进程的实体,一个线程必须拥有一个父进程

  • 系统会把资源分配给进程 同一个进程中的所有线程 共享次资源

 

4.线程和进程区别

1.进程拥有系统资源;线程不拥有系统资源,它和其他线程共享所在进程的资源

2.进程拥有独立的数据空间;线程直接共享相同的数据空间

所以:

  1. 进程可以独立进行,线程必须在进行中运行
  2. 进程的创建、撤销、和切换,其系统开销要比线程大
  3. 线程之间通信要比进程之间通信要简单

 

 

 

5.并发和并行

并发:多个线程 更具CPU的调度情况 执行

并行:多个线程 同时执行

 

6.线程的创建

方法一:

继承Thread类

  1. 创建一个类继承Thread类
  2. 覆写run方法(子线程做的事情 写在run方法中)

  3. 启动线程(调用start())

 

 

方法二:

实现Runnable接口

 

  1. 创建一个类实现Runnable接口
  2. 覆写run方法(子线程做的事情 写在run方法中)
  3. 启动线程(调用start())

注意:实现Runnable接口,只是拿到了run方法,通过这种方式创建的线程,不是一个真正的线程

 

 

7.线程的常用方法

currentThread():获取当前线程对象

sleep():休眠: 可以让线程睡一会
 yield():礼让   当前线程 主动放弃Cpu的资源 让其他线程去抢占 但是 放弃的时间不确定 有可能刚刚让出去 马上自己又抢回来
setPriority():设置优先级
                   优先级:1~10 10最高
                   默认是5;
 join():调用以后  等待代用的线程结束以后 再继续执行
isAlive(): 判断线程是否活着
interrupt():中断线程(并不是说调用以后线程就停止  该方法 仅仅知识修改了线程中断的标识)
默认的中断标识:false

线程被中断: 中断标识改为true

 

 

8.线程的生命周期

线程的生命周期:从线程的创建到线程的结束

 

 

9.同步

synchronized:同步锁,保证资源,同一时间,只能被同一条线程访问

 

 

 

 

 

 

 

推荐阅读