JAVAday29

.IO流:  作用:  传输数据, 从数据源 到  数据汇的过程
    字节输入流: InputStream: 抽象类     
                   |-- FileInputStream 文件流
                   |-- ObjectInputStream 反序列化
                   |-- ByteArrayInputStream 字节数组流
    字节输出流: OutputStream:
                   |-- FileOutputStream 
                   |-- ObjectOutputStream
                   |-- ByteArrayOutputSteam 
       
2.字符输入流: Reader 
                   |-- BufferedReader  字符流缓冲区
                   |-- InputSteamReader 转换流
                          |-- FileReader  文件字符李璐
                   |-- CharArrayReader   字符数组流
    字符输出流: Writer 
                  |-- BufferedWriter    
                  |-- OutputStreamWriter
                        |-- FileWriter
                  |-- CharArrayWriter
                  |-- PrintWriter 打印流
                            append();
                            print();
                            println();
                            writer();
                            
File:的应用
  1.文件的复制
  2.文件夹的复制
  3.文件夹遍历
  4.文件夹删除

***:
  抛出异常 , 所以大多数 都是 提示异常信息
  
流 , 异常:  将程序的 异常信息打印到  日志文件中
 xxx.txt  日期  包 
 
  \ by zero
-------------------------------------------------------------
多线程: 
  什么叫 进程: 在操作系统中,正在运行的程序 叫 进程;
    它会占用操作 系统的 内存, 每个进程都有自己独立的内存空间
     互相不干扰,这种现象叫 并行;  一个程序中可以有多个 运行的程序出现 ;
   
  什么叫线程: 
   线程是 运行在  正在执行的程序程序(进程)中的 子程序流,可以有多个
    每一个线程 都占用 进程的内存空间,住过程序终止了 ,那么 线程也就不存在了
      线程和线程都是独立运行的 相互 不干扰;  他们都公用一个 进程的内存

多线程?  多个线程 并发执行, 高并发;
  多个正在执行的 子程序流

总结: 
  Eclipse: 程序 -----> 进程(运行在操作系统后台的)
     |-- 线程(main线程)
         |-- 子线程  (所有的子线程想要运行 就必须通过  main线程调用)

如何 实现 线程的 并发执行; 

java中如何 实现多线程?
  1.继承 Thread 线程类     线程
  
  2.实现Runable 接口    具有线程的功能, 它本身 不是线程 
  3.实现Callable接口 
  
1.模拟迅雷 下载电影: 
     3个 线程   3个任务
       
每一个功能 最基本是 有由一个线程来执行的 ,
  但是一个线程可以执行多个 功能
  
  main
    new Thread();
    
 Thread类的构造方法: 
     new Thread();
     new Thread(Runnable r);
     new Thread(Runnable r , String name);      
     new Thread(String name);  线程的名字,如果没有 就默认Thread-0
 
 Thread类的常用方法: 
     1.currentThread(); 返回当前线程  的对象   
     2.getId();
     3.getName();
       setName();
     4.getPriority(); 获取线程的优先级 
       setPriority();
     5.isDaemon(); 守护线程   最后执行 ,不确定
         jvm GC 就是一个守护 线程
       setDaemon(true);
       toString();
    
     7.run(); 线程体 , 一般被重写
     8.start(); 启动线程的方式

线程的生命周期: 
     6.join();   强制加入 : 一般用于 main函数下
     9.sleep(long millis);
     10.yield();  让步   测试

 100


-------------------------------------------------  
1.线程的生命周期: 
   新建 new   
                  
                  
2.sleep 方法  和  yield方法的区别:
   1.sleep方法会让线程进入阻塞状态                   
     yield方法是让线程直接进入就绪状态
   2.sleep方法 需要传入 时间片
     yield不需要入参
   3.sleep方法异常
     yield没有异常
     
   4.sleep: sleep方法执行后 ,这个线程回到了 就绪状态,
                 他会让线程优先高 优先执行
     yield: yield执行后,有可能让 线程优先级较低的先执行
                          
yield一般用于测试环境下; 

join方法 会让 线程进入阻塞状态:;
  调用者 是 强制加入 ,让正在执行的线程  进入阻塞状态         
}
--------------------------------------------------
线程同步: 
   案例: 小朋友抢苹果 :5个苹果  , 2个小朋友抢
         
多个 共享一个资源         
   
   在线程并发情况下 , 多个线程共享 一个资源的时候,
   有可能出现 资源竞争问题;  多个线程同时 执行的这部分代码
        
如何解决 这个资源竞争问题 ? 
  1.java提供了一个 锁机制   同步锁
      synchronized 关键字
      
java中有两种方式来解决 资源竞争问题: 
 1.同步代码块儿
      synchronized(锁标记(对象)){
          //这里 编写 核心 代码  ,一般情况下 不会 将循环写在这里
      }
 
 2.同步方法
 
     在普通方法上 添加 synchronized 
 
 自己模拟 火车站售票: 
  
   1.Station implement Runnable{
         Rnadom r = new Random();
           
         int tickets = 100;
         public void run(){
        //同步代码块儿  synchronized(this){   }
        //同步方法         public synchronized void catchTicket(){
        
                      } 
         }     
         Thread.sleep(r.nextInt(4000));
   }
   2.Thread t1 = new Thread(station, "窗口一"); 
     Thread t2 = new Thread(station, "窗口二"); 
     Thread t3 = new Thread(station, "窗口三"); 
     Thread t4 = new Thread(station, "窗口四");   
  
    t1.start();
    t2.start();
    t3.start();
    t4.start();
  
          
    


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值