• java 多线程


    一 什么是线程

           线程(thread)是一个程序内部的一条执行路径

            常用的main方法就是一条单独的执行路径

        如果程序中只有一条执行路径 那么这个程序就是单线程的程序

       多线程是什么

              多线程是指从软件上实现多条执行流程的技术

    Thread 类

         java是通过java.lang.Thread 类来表示 线程

         按照面向对象的思想 Thread类应该提供思想多线程的方式

    多线程实现的方法 一 继承thread类

    定义一个子类 mythread 继承线程类java.lang.Thread 重写run()方法

    创建MyThread 类的对象

     调用线程对象那搞的start()方法启动线程(启动后还是执行run方法)

    优缺点

       优点 编码简单

       缺点  线程类已经继承Thread 无法继承其他类 不利于扩展

    问题 

        1 为什么不直接调用run方法 而是调用start方法启动线程

             直接调用run方法会当成普通方法 此时还相当于单线程执行

             只用调用start方法才是启动一个新的线程

      2 把主线程任务凡在子线程之前

            这样主线程一直是先跑完的 相当于一个单线程的效果

    总结 

                继承thread类

                 重写run方法

                 创建线程对象

                  调用start方法启动线程

     多线程的实现方法二 实现Runnable 接口

          定义一个线程任务类 MyRunnable 实现Runnable 接口 重写run方法

         创建  MyRunnable 任务对象

          把MyRunnable 任务对象交给Thread处理

          调用线程对象的start方法启动线程

           

     方式二 优缺点

                 优点 线程任务类 只是实现接口 可以继续继承类和实现接口 扩展项强

                 缺点  编程多一层对象包装 如果线程有执行结果是不可以直接返回的

    总结

      

    1. 第二种方式是如何创建线程的?
    l 定义一个线程任务类 MyRunnable 实现 Runnable 接口,重写 run() 方法
    l 创建 MyRunnable 对象
    l MyRunnable 任务对象交给 Thread 线程对象处理。
    l 调用线程对象的 start() 方法启动线程
    2. 第二种方式的优点
    l 优点:线程任务类只是实现了 Runnale 接口,可以继续继承和实现。
    l 缺点:如果线程有执行结果是不能直接返回的。

    Thread 的常用方法

                  获取线程名称getName() 设置名称setName()  获取当前线程对象 currentthread()

     

     

     

     

     

     

     线程安全

               多个线程同时操作同一个共享资源的时候可能会出现业务安全问题 称之为线程安全问题

    线程安全问题出现的原因

              存在多线程并发

              同时访问共享资源

               存在修改共享资源

    线程同步

             线程同步的核心思想

              加锁 把共享的资源进行上锁 每次只能有一个线程进入访问完毕后解锁 然后洽谈线程才能进来

          同步代码块

                  作用 把出现线程安全问题的核心代码上锁i

                   原理 每次只能进入一个线程 执行完毕后自动解锁 其他线程才可以进来执行

                   关键字 synchronize(同步对象){

                        操作共享资源的代码(核心代码)

    }        

     

     

     

     

     

     

  • 相关阅读:
    抓住那头牛——BFS
    源码构建LAMP环境-2
    ajax - 终结篇jsonp,防抖节流
    Day10--渲染tarBar上的数字徽标
    聊聊RocketMQ Rebalance负载均衡触发机制浅析
    Effective C++条款09:绝不在构造和析构过程中调用virtual函数
    独一无二:探索单例模式的现代化创造之道
    Q-Vision+CANpro Max总线解决方案
    【多彩的网页(1)】CSS动画详解
    PHP 约瑟夫环问题
  • 原文地址:https://blog.csdn.net/qq_52153640/article/details/126610179