zoukankan      html  css  js  c++  java
  • Java——多线程学习笔记(上)

    多线程

    产生多线程的方法:

    (1)继承Thread类,重写run函数,调用start函数启动线程

    (2)某一个类实现Runnable接口,然后该类作为参数传入一个Thread类实例,再调用该Thread类实例的start函数启动线程

    注意点

    一个线程只有一个开始

    Thread myThread = new Thread();

    myThread.start();

    myThread.start();//这样会报错

     

    同时如果直接调用线程对象的run()方法,不会产生新的线程。

     

    yield()是当前线程释放 cpu 资源,重新与其他线程争抢,结果不一。

     

    join() 在线程a中调用线程b的join()会使得a进入阻塞状态,等到线程b完全执行完毕后,线程a才会继续执行。

     

    sleep()线程睡眠

     

    isAlive()判断当前线程是否存活

    线程安全问题

    如三个线程卖票,会出现重票、错票等问题

    原因:某一线程操作未完成时另一个线程进入操作,导致重票错票。

    解决方法:当一个线程在操作过程中,其他线程无法参与(即使该线程在阻塞状态中),直到该线程操作结束,其他线程才能参与。

    在JAVA中通过同步机制解决线程安全问题。

    方法一:同步代码块

    synchronized(同步监视器){
    //需要被同步的代码
    }
    说明:1.操作共享数据的代码,即为需要被同步的代码
    2.共享数据:多个线程共同操作的变量
    3.同步监视器,俗称:锁。任何一个类的对象都可以充当锁。一般用当前对象。要求:多个线程必须要共用同一把锁。  

    方法二:同步方法

    1.依然涉及到同步监视器,只是不需要显式声明,依然需要注意多个线程必须要共用同一把锁。。

    2.非静态的同步方法,同步监视器是:this

    静态的同步方法,同步监视器是:当前类本身

     

    同步的好处是解决了线程的安全问题。但操作同步代码时,只能有一个线程参与,其他线程只能等待,类似于单线程,效率有所下降。

  • 相关阅读:
    第十章 Ingress
    第九章 Service
    第八章 资源控制器
    第一章 Xshell5评估期已过问题
    第七章 yaml格式
    第六章 资源清单
    第五章 配置私有仓库Harbor
    第四章 K8s部署安装
    36 SpringBoot 在系统配置文件中动态加载配置
    Java 集合、数组 任意个数数字相加等于一个指定的数
  • 原文地址:https://www.cnblogs.com/ars134419622/p/13475909.html
Copyright © 2011-2022 走看看