8.19笔记

复习{
 多线程: 
  程序: 什么是程序;
       程序 = 数据结构 + 算法 + 编程语言;
       在操作系统中安装的 软件,一套可执行文件,能够实现我们
       所预期的任务;
       
  进程: 进程就是 正在操作系统中 运行的程序;
          
 什么是多进程?
       运行在操作系统中的 多个 进程 ,那么就是多进程
      进程和进程之间相互不干扰,每一个进程都占用操作系统的内存
          有自己独立的运行空间;      

  线程: 什么是线程?
       线程是进程上的 子程序流,它运行时会占用进程的内存;
 
 多线程: 什么是多线程?
     多线程是运行在 进程上的 多个子程序流,它们运行时会占用
     进程的内存,线程和线程之间 运行 相互不干扰,是互斥的;
     
 任何程序都是由线程的,java也不例外,一个java程序想要执行
 它也必须有线程,就是main线程; 当程序启动时,它会执行main线程
 执行任务;  也就是单线程执行
 
 多线程的作用?
      提高程序的执行效率, CPU  4核 
  
 那如何实现多线程? 
   1.继承Thread类  : Thread类 被称为 线程类
   2.实现Runnable接口
   3.实现Callable接口           
       
  提问: 为什么java中 提供实现多线程的方式有两种?
            答: 因为java中 只持支 单继承     
                  class B extends A implements Runnable

                  class B extends Thread  就继承不了A了}
Thread类的方法: 
 1. new Thread();
 
 2. 方法
      |-- run();  run方法是线程体 ,执行需要执行的任务
      |-- start();  用于启动线程的方法
      |-- join();  强行加入, 让当前正在运行的线程进入阻塞状态
                     直到这个调用join方法的线程执行完毕
      |-- isDaemon(); 判断当前线程 是否是守护线程
                    什么是守护线程?
                         用于服务其他线程的线程 ,一般用于运行后台任务
                         它具有自动结束生命周期的能力,不受jvm虚拟机影响
                         普通线程 jvm进程结束,普通线程的生命周期就销毁了
                         守护线程则不会,GC 垃圾回收器就是一个 守护线程
                         当jvm虚拟机进程结束,GC依然会回收垃圾;
      
            setDaemon(boolean flag);
      |-- sleep(long l);  让线程进入阻塞状态,直到当前的休眠的时间片结束
                             当调用sleep方法的时候 他是不释放资源的 
                         
      |-- isAlive(); 判断是否存活
      |-- yield(); 让步  ,一般用于测试,会让线程直接进入  就绪状态
      |-- getName();
            setName();
      |-- getId();
      |-- getPrority(); 优先级   1  5 10
            setPrority();
      |-- currentThread();  获取当前正在运行的线程      
     
  currentThread(); 静态方法
       Thread t = Thread.currentThread();
    
sleep方法 和yield方法的区别?
     1.sleep方法 有一场 , yield方法 没有异常
     2.sleep方法有入参时间, yield方法没有
    3.sleep方法会让线程进入 阻塞状态,yield方法会让线程进入就绪状态
    4.sleep方法不考虑优先级,所以会让低优先级的线程 优先执行
      yield方法考虑优先级,会让同等级,后更高优先级的线程先执行
    5.sleep一般用于正式场景,yield一般用于测试;   

案例:  迅雷下载
   1. 多个线程执行 多个任务,自己执行自己的,相互不干扰
     
==========================================================
案例2:
  资源进程问题: 多个线程 共享一个资源 会出现 资源竞争问题;
    那么如何解决?
      多线程中提供了一个东西,锁   同步锁synchronized
  
  同步锁有两种形式: 
   1.同步代码块儿
         synchronized(锁标记  对象){     只要具备唯一性就行
              需要执行的代码
         }
         
         只有一个线程  可以持有 当前锁标记
   
   2.同步方法
            public synchronized 返回值类型 catchApple(入参列表){
            
            
            }
       
    同步方法最常用;  java很多类中 用的都是 同步方法   
  
  问题: 假设有 5个苹果,有两个小朋友去抢,如何实现程序?
               5个苹果是资源,两个小朋友是 线程
=================================================================================
死锁问题: 
    编写一个哲学家就餐问题的模拟程序(要求解决死锁的问题)   
        
        会出现死锁 , 死锁 是我们在使用 同步锁时, 对于锁的使用不当
        导致程序 无法继续向下执行的现象,就是 死锁
        
        各自持有 各自的 资源不释放,那么就死锁了
        
       解决死锁的 办法  就是在编写程序时,注意适当的 释放锁资源
        
       案例: 多个线程  共享 多个 资源 

 编写一个程序 ,完成哲学家就餐问题:
       1.筷子 、  资源       三只 筷子
       2.哲学家 、 线程          三个哲学家 

死锁是程序执行时的一种现象, 是应为没有适当的释放锁资源导致的;
如何解决死锁,就是适当的释放锁资源;


三个综合案例:
     1.一个线程处理 一个任务,相互不干扰,执行完毕 后 销毁了
     2.多个线程共享 一个资源 ,会出现资源竞争问题, 必须使用同步锁synchronized解决
     3.因为有了 synchronized ,所以程序中会出现 死锁现象; 
          多个线程共享  多个资源的时候,使用到了synchronized ,导致出现了死锁现象
          释放的释放锁啊
==============================================================================
线程之间的通讯


实现Callable接口


                  
                  
                  

要在CentOS 7上安装MySQL 8.19,您可以按照以下步骤操作: 1. 首先,您需要下载MySQL 8.19的压缩包,并将其解压缩到/usr/local/目录下。您可以使用以下命令将解压得到的文件移动到/usr/local/目录,并重新命名为mysql: ``` mv mysql-8.0.19-linux-glibc2.12-x86_64 /usr/local/mysql ``` 引用 2. 接下来,您需要修改/usr/local/mysql/目录的权限,以确保MySQL能够正常运行。您可以使用以下命令更改目录的所有者和组为mysql: ``` chown -R mysql.mysql /usr/local/mysql/ ``` 引用 3. 之后,您可以将MySQL的启动脚本复制到/etc/init.d/目录中,以便MySQL可以作为服务启动和停止。您可以使用以下命令执行此操作: ``` cp ../support-files/mysql.server /etc/init.d/mysqld ``` 引用 完成上述步骤后,您就成功安装了MySQL 8.19。您可以使用适当的命令启动、停止和管理MySQL服务。请记住,这只是安装MySQL的基本步骤,您可能需要根据您的具体需求进行其他配置和设置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [centos7安装MySQL Community Server 8.0.19](https://blog.csdn.net/resuper0/article/details/104442933)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值