Java之线程

一:什么是线程?

线程:正在运行的程序 如QQ IDE
系统会为这个进程分配独立的内存资源

进程:执行任务的最小单位,一个进程最少拥有一个线程(运行起来就执行的线程称为主线程)

线程之间是共享内存资源的(进程申请的 线程之间可以通信的 如:数据传递)每一个线程都有自己的生命周期

二:如何创建一个线程?


QQ截图20190819204848.png
    创建线程:
    NEW     新建  线程刚被创建好
    RUNNABLE    就绪状态  只要有CPU的时间片就可以运行
    BLOCKED 阻塞状态
    WAITING 等待 wait
    TIMED_WAITING 终止状态
    TERMINATED   终止状态

    实现线程的过程
1.自己描述一个类  
2.继承一个父类Thread
3.重写run() 方法
4.new一个线程对象  调用start方法  让线程进入就绪状态
实例1:  

创建一个类继承Thread 
线程1.1.png
线程1.png
实现线程的第二种
1.自己描述一个类  
2.实现一个父接口Runnable
3.重写run() 方法
4.new一个线程对象   

实例2:
  创建一个类实现Runnable接口
  在实现的时候要麻烦一下  
  需要new 一个Thread 对象  在使用start() 方法
线程2.0.png

线程2.1.png
三:为什么要创建子线程 ?
  1. 为了不阻塞主线程,将耗时的任务送给一个子线程,让子线程执行,让程序变得更快
  线程中的一些方法:
join()   阻塞当前这个线程, 等join 的线程结束后再执行
setName () 设置线程的名称
getName()  获得线程名称
currentThread ()  获得当前线程运行的对象

四:线程安全
    1.使用synchronized   同步监听器  需要一把锁 
        synchronized ( 监听器/对象/锁 ){ 需要同步的代码 }
  创建一个类管理票:在没有使用synchronized   关键字保护线程时会出现如下图线程安全1.0.1的情况
线程安全1.0.png
线程安全1.0.0.png
线程安全1.0.1.png

解决问题方法:
确保操作的对象是同一个 对象:synchronized ( 监听器/对象/锁 ){ 需要同步的代 码 } 如果多个线程操作一个代码块 必须操作同一个对象的同一把锁


线程安全2.0.0.png

执行效果如下:


线程安全2.0.1.png
    2.使用Lock
  Lock  
   static ReentrantLock lock = new ReentrantLock();
 Lock中的一些方法:
lock.lock();
lock.unlock();
lock.newCondition(); 
ReentrantLock   lock;
Condition   c = lock.newCondition();
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容