java复习第十四天


一、 多线程的通信
  ■ 因为线程的死锁,从而引发要多线程的通信
    死锁:每个线程不释放自己拥有的资源,却申请别的线程拥有的资源,会造成死锁问题
  ■ 线程间的通信:等待通知机制
  ■ 每一个对象都有一个等待队列。
   
    线程t1对O调用wait方法,△必须是在对O加锁的同步代码块中。
    结果:1、线程t1会释放它拥有的所有的锁标记
          2、会进入O的等待队列,开始阻塞
    线程t2对o调用notify/notifyAll方法时,也必须是在对o加锁的同步代码块中。结果:会从o的等待队列中释放一个/全部线程

  
  ■
    ▲ 初始状态                ▲阻塞状态          ▲终止状态
        \                  /            ┍ 1           ┓
         \                /               \ 2sleep    /
          \start        /                  \ 3join   /stop
           \           /                    \       /
            ┙       ┕                      \     /
         ▲ 可运行状态  _ _ _ OS选中 _ _ _\   ▲运行状态
          (只缺CPU)    \  CPU到期或调用yield
                    ┍                        /    \
                      \                      /      \wait
                       \        Synchronized/        \
                        \                  /          \
                         \                /            \
                          \              /              \
                           \           ┕               ┙
                             ▲ 锁池状态 <------ ▲等待队列
                                          notify/notifyall


练习
1、利用线程的通信机制,用两个线程打印以下的结果:
   1 2 A 3 4 B 5 6 C 7 8 D ... 49 50 Y 51 52 Z
2、思考为什么调用wait()方法之前用while判断,而不用if判断

  currentThread
  public static Thread currentThread()返回对当前正在执行的线程对象的引用。
 
 
 
二、 IO流
(一)java.io Class File
  ■ 一个File对象代表了一个文件或目录
      File f=new File("1.txt");//在堆里申请了个File对象的空间
      f.createNewFile();//创建了个文件对象,不会产生文件,只有操作File对去创建文件
      f.delete();
      f.mkdir();
      System.out.println(f.getName());//相对路径
      System.out.println(f.getAbsolutePath());//绝对路径

■ File[] listFiles(FileFilter filter)
          返回表示此抽象路径名所表示目录中的文件和目录的抽象路径名数组,这些路径名满足特定过滤器。
    java.io
      接口 FileFilter
    accept
      boolean accept(File pathname)
      File pathname是指被遍历目录中所有文件和目录
    作业:打印目录下所有的.java文件,包括子目录(提示:递归)
   
(二)
  ■ io流是用于JVM和数据源之间交换数据
      |      |              |      |
      |      |              |      |
      |      |              |      |
      |      ---------------   DB  |
      | JVM         流         net |
      |      ---------------   file|
      |      |              |      |
      |      |              |      |
     
     
  ■ 一个流也是个对象
    流的分类:输入流、输出流
              字节流、字符流
              节点流、过滤流 (功能,过滤流是给其它增加个功能,本身不传输数据)
  ■ 装饰模式
                    武器
                  /      \
                 /        \
           枪(节点流)    零件
                         /|\ \
                        / | \ \ \ \
                       瞄 消 M P S L
                         (过滤流)

(三)字节输入流
    java.io
    类 InputStream
    字节输入流的所有类的超类
  ■ java.io
    类 FileInputStream
    public FileInputStream(String name)
                throws FileNotFoundException//文件不存在会抛异常
    FileInputStream(File file)
    FileInputStream(FileDescriptor fdObj)
  ■ FileInputStream中方法介绍
    void close()
        关闭此文件输入流并释放与此流有关的所有系统资源
    int read()
        从此输入流中读取一个数据字节。
        返回下一个数据字节;如果已到达文件末尾,则返回 -1。
    int read(byte[] b)
        从此输入流中将最多 b.length 个字节的数据读入一个字节数组中。
        返回:读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。
    int read(byte[] b, int off, int len)
        从此输入流中将最多 len 个字节的数据读入一个字节数组中。

你可能感兴趣的:(java,jvm,多线程,OS,F#)