`
heimeiyingwang
  • 浏览: 97531 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

corejava辅导(12--1)

阅读更多

 

死锁问题

 

多线程不释放自己拥有的锁标记,而想申请其他线程拥有的锁标记,就会造成死锁。

 

没有获得加锁对象的锁标记的线程,不能访问只有获得该对象所标记才能访问的同步方法,但可以访问这个对象的非同步的方法。

 

死锁的两种处理方法

统一排列锁顺序(解决不同方法中对多个共享资源的访问)

       对象1的方法

              synchronized(a)

              synchronized(b)

       对象2的方法

              synchronized(a)

              synchronized(b)

 

java线程间通信(也就是线程间的相互协调)

 

等待通知机制

 

线程间通信使用的空间称之为对象的等待对列wait pool,该队列也是属于对象的空间的。

 

进入等待池

 

使用Object类中wait()的方法,在运行状态中,线程调用wait(),此时表示线程将释放自己所有的锁标记和CPU的占用,同时进入这个对象的等待池。等待池的状态也是阻塞状态,只不过线程释放自己的锁标记。在对该对象加锁的同步代码块里,才能调用该对象的wait()方法,表示线程将会释放所有锁标记,进入等待队列,线程将进入等待队列状态。

 

一个线程进入了对一个对象加锁的同步代码块,并对该对象调用了wait()方法,释放自己拥有的所有锁标记,进入该对象等待队列,另一个线程获得了该对象的锁标记,进入代码块对该对象调用了notify()方法(对该对象调用了notifyAll()方法,会释放等待队列里所有的线程),对该对象调用方法的线程也不会释放所拥有的锁标记(对自身没有影响),也就是从等待队列里释放出一线程,释放出的这个线程要继续运行也就还要进入那个同步代码块,因为得不到要访问代码块对象的锁标记,而进入该对象的锁池,等待所标记释放。

 

注意:用notifyAll()取代notify(),因为在调用notify()方法时,是由系统决定释放出哪个线程。

 

退出等待池进入锁池

 

注意:只能对加锁的资源进行wait()notify()

1) wait():交出锁和CPU的占用,进入该对象的、等待队列

2) notify():从对象的等待队列中释放任意的一个线程

3) notifyAll(): 从对象等待队列中释放所有线程并放到锁池中

 

 

JavaI/O流与文件

 

 

Java中的文件操作

     

File类(java.io.File)可表示文件或者目录(在JAVA中文件和目录都属于这个类中,而且区分不是非常的明显)。

 

File下的方法是对磁盘上的文件进行磁盘操作,但是无法读取文件的内容。

 

注意:File类的对象实施表示一个文件并不是真正的文件,只是代理而已,通过代理来操作文件创建一个文件对象和创建一个文件在JAVA中是两个不同的概念。前者是在虚拟机中创建了一个文件,但却并没有将它真正地创建到OS的文件系统中,随着虚拟机的关闭,这个创建的对象也就消失了。而创建一个文件才是在系统中真正地建立一个文件。

 

例如:

File f=new File(“11.txt”);//创建一个名为11.txt的文件对象

f.CreateNewFile();//真正地创建文件

 

File类的方法

 

boolean createNewFile() //创建文件

boolean mkdir() //创建目录

boolean mkdirs() //创建多个目录

boolean delete() //删除文件,删除的是创建File对象时指定与之关联创建的那个文件。

boolean deleteOnExit(); //JVM进程退出的时候删除文件,这样的操作通常用在临时文件的删除。

String[] List()//返回当前File对象下所以显文件和目录名(相对路径)

File[] ListFiles()//返回当前File对象(必须是目录)所有Files对象,可以用getName()来访问到文件名。

isDirectory()isFile()//来判断究竟是目录还是文件。

String getParent()//得到父类文件名,只有在构造对象时传入了Parent对象才有。

File getParentFile()//父路径名的抽象路径名,如果没有指定Parent对象,则返回 null

String getPath()//获得相对路径

exists() //判断文件或文件夹是否存在。

getAbsolutePath() //获得文件的绝对路径

 

使用File类的实例

例:这个类是实现了删除_desktop.ini文件的功能

import java.io.*;

public class LsitFile {

     public static void main(String[] args) throws Exception{

         File f=new File("C:\\");

         print(f);

     }

     static void print(File f){

         File[] fs=f.listFiles(new MyFilter());

         for(int i=0;i<fs.length;i++){

              if (fs[i].isFile()){

                   fs[i].delete();

              }

              else{

                   print(fs[i]);

              }

         }

     }

}

 

class MyFilter implements FileFilter{

     public boolean accept(File arg0) {

         if (arg0.isDirectory()) return true;

         String name=arg0.getName();

         if (name.equals("_desktop.ini")) return true;

         else return false;

     }

}

 

分享到:
评论

相关推荐

    很好的一本java辅导资料!

    2. **corejava辅导(1--1)至(5--3)**:这些章节可能逐步介绍了Java语言的基础语法,如变量、数据类型、运算符、控制流程(条件语句、循环)、方法定义和调用、数组的使用以及字符串处理。 3. **corejava辅导(2-...

    Java面试集锦: Core Java Essentials

    整体来看,《Java面试集锦: Core Java Essentials》是一本全面覆盖Java核心技术要点的面试辅导书籍。无论是对于即将参加面试的求职者,还是希望巩固Java基础知识的开发者,本书都提供了丰富的学习材料和面试问题,...

    java知识全集

    **3.2 corejava辅导(1--1)** - **基本数据类型**: 如int、double等。 - **字符串操作**: 字符串的创建和常用操作。 - **数组**: 数组的声明、初始化和遍历。 **3.3 corejava辅导(1--2)** - **循环结构**: for...

    几万的Java上课内容,辅导班弄来的,大家自学的可以看看

    1. Java设计和编程基础:涵盖Core Java编程基础、Java设计原则、算法、模式等核心知识。 2. 数据库和Web前端技术:涉及数据库技术(如Oracle、MySQL、SQL优化和PLSQL开发)、Web前端技术(如H5、CSS3、JavaScript、...

    javaWeb基础技术辅导

    7. **CoreJava辅导资料.zip**:这可能包含Java语言的基础教程或参考资料,包括类、对象、接口、异常处理、集合框架等内容,这些都是JavaWeb开发的基础。 8. **javaWeb基础技术辅导.zip**:这个文件很可能包含了详细...

    javaee请假管理系统文档.docx

    - CPU: Intel Core i5 2.0 GHz - 内存: 2 GB - 硬盘: 250 GB #### 七、测试结果与分析 **测试项目:** 请假管理系统 **测试人员:** 麦城进 **测试结果:** - **系统操作登陆测试:** 用户登录成功后,能够正确跳转...

    数据库代码

    "CoreJava.rar"可能是一个包含Java核心编程资源的压缩文件,Java是一种广泛用于开发数据库应用程序的编程语言。在数据库应用中,Java可以用来编写DAO(数据访问对象)层,实现对数据库的操作,如CRUD(创建、读取、...

    学生请假管理系统_学生请假管理系统_源码.zip

    2. **后端开发**:后端通常基于Java、Python或.NET等语言,利用Spring Boot、Django或ASP.NET Core等框架进行开发。 3. **数据库管理**:MySQL、Oracle或SQL Server等关系型数据库用于存储学生、教师信息以及请假...

Global site tag (gtag.js) - Google Analytics