8.18笔记

本文详细介绍了Java中的多线程概念,包括线程生命周期、线程同步、线程优先级等,并探讨了Thread类与Runnable接口的实现方式。同时,文章还深入讲解了字符流与字节流的使用,特别是BufferedReader、PrintWriter等缓冲流的运用,以及NIO(非阻塞I/O)的核心组件Buffer、Channel和Selector。通过实例展示了如何在实际编程中利用这些技术提高程序性能。
摘要由CSDN通过智能技术生成

复习{
  字符流: 一般处理大型文本格式的文件 较好,效率高
   Reader:  抽象类
      char[]    
        BufferedReader: 字符流的缓冲区
            构造器:
               new BufferedReader(new InputStreamReader());
        
             |--String str =  readLine();按行读
        InputStreamReader: 字节流 转换为 字符流的 桥 转换流
               new InputStreamReader(new FileInputStream(new File()))
              
        CharArrayReader: 字符数组流
             read(char[] c);
             read();
             read(char[] c , int off ,int len);
         
   Writer:  抽象类
         |-- BufferedWriter 字符流的缓冲区
                writer(String str);
                  newLine(); 换行
                  flush();
                  close();
                       
         |-- OutputStreamWriter 转换流
         |-- CharArrayWriter 字符数组流
                    writer(int a);
                    writer(char[] c);
                    writer(char[] c ,int off, int len);
         |-- PrintWriter 打印流
               append();
               write();
               print();
               println(); 
          目的都是为了将数据写入到 文件中     

高级流: NIO
   NIO (non-blocking I O )     new IO 
   三大核心:
   |-- Buffer: 缓冲区   抽象类
             |-- ByteBuffer ,ShortBuffer, IntBuffer, LongBuffer
                 DoubleBuffer, FloatBuffer, CharBuffer
                  StringBuffer
           ByteBuffer buffer = ByteBuffer.allocate(100);     
           ByteBuffer buffer = ByteBuffer.allocateDirect(大小);
        
            postion , limit, capacity
             位置         限制       容量
        引用数据类型: 
            1.数组, 2,类, 3,接口    4,枚举    5 ,注解
        
   |-- Channel: 通道
             FileInputStream();
             FileOutputStream();
   
        FileChannel c = getChannel();
                       
                  c.read(ByteBuffer[] b);
                  
                  buffer.flip(); 切换读写模式     postion 清 0
                       
                  c.write(ByteBuffer[] b);
   |-- Selector:
              监听器, 监听多个 Channel 传输数据
              
字节流

File类的应用

字符流

NIO                        
---------------------------------------------------------------------------}
多线程:
   1.程序就是一个操作系统中,未运行的代码;
     
   2.了解什么是进程?
       在一个操作系统中,真在运行的程序 就是进程;
     运行起来的程序就是进程;

   3.多进程?
        多个进程 同时执行效果为  多进程,进程和进程之间执行的时候
        相互不干扰
   
   4.线程    
             线程是运行在进程中的 一个 子程序流,它占用
             这个进程的内存,没有自己独立的运行内存;  
      
   5.多线程:
            多线程是运行在同一个进程中的 多个 子程序流,     
          他们共用一个进程的内存,各个线程在执行时,相互不干扰

任何程序都由线程组成; 在执行程序的时候
一定会有一个线程执行它的任务,它的任务 也就是程序的任务;

 程序在运行时 需要去 抢占CPU的使用权,并且分配操作系统的内存;

为什么要学习多线程?
   让我们了解程序的内部结构,以及运行原理;
 
 线程的作用就是 来完成程序中 需要完成的任务
 
 线程和线程之间是 互斥的
 
java如何提供多线程的功能?
  1.继承Thread 类: 
          迅雷下载的案例:     
              多个线程完成多个任务,线程和线程之间相互不干扰
        
      Thread类被称为线程类: 
             1.currentThread(); 代表当前线程的对象
                主线程  名字为 main线程
             
             子线程在run方法体中执行
                 Thread.currentThread().getName(); 获取的是thread-0,thread-1,thread-2     
           
           2.getName(); 获取线程的名字
             setName(); 设置名字
           3.getId(); 获取线程ID
           4.getPriority();  1低     5中   10高
                优先级越高 ,抢占到cpu的使用权越大
             setPriority(int value);  
           5.isAlive();判断当前线程是否活着
           
 ***      6.isDaemon();判断是否是 守护线程
           7.join();     强行加入
           8.run(); 是线程体,只有主线程能运行
           9.start(); 启动线程的方法,jvm虚拟机 执行run方法
           10.sleep(long millis);让当前正在执行的线程进入阻塞状态 ,不释放资源 
           11.yield(); 让步
          
线程的生命周期:  
                                阻塞blocking     
               sleep时间片结束         调用sleep();
               调用join()的线程执行完毕        调用join();
 新建new  ---> 就绪run -------> 运行 start() -----> 销毁death
                 
sleep和yield方法的区别?
   答:
     1.sleep方法 有异常 ,yield没有异常
     2.sleep方法 有时间参数, yield没有入参
     3.sleep方法 不会考虑线程的优先级问题
          所以低优先级线程有抢占cpu的使用权较大
       yield方法 考虑 线程 优先级的,它会让 与它线程优先级同等级的
                或高优先级的线程  优先执行     
     4.sleep适用于正式的应用场景, 
       yield方法适用于测试场景,效率高  ,没有等待感     
      5.sleep会让当前线程进入到阻塞状态
        yield不会让线程进入到阻塞状态 ,会直接进入到就绪状态

join 让当前正在执行的线程进入到阻塞状态;
     等待者线程执行完毕后 ,才会回复阻塞状态的线程继续执行;    
    
守护线程:  isDaemon();
    守护线程 就是用于服务别的线程的     线程,
    一般处于后台服务,运行在后台进程中,我们看不见
    具有自动  结束生命周期的 能力,不受jvm虚拟机进程的影响
    如果jvm虚拟机提前结束进程, 守护线程有可能依然存活
    普通线程则不然,会直接销毁
    
    GC 就一个守护线程 ,机制jvm迅即进程结束,它依然会
    回收垃圾
    
    守护线程必须在 线程 启动前 设置 
    
    帮助我们完成一些 后台任务
------------------------------------------------------------------------    
  2.实现Runnable接口
  3.实现Callable接口      
 
 
 
   11  12

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值