【Java】内部类、File类、线程优先级

简介: 【Java】内部类、File类、线程优先级

@TOC


前言

本文介绍了File类、内部类、以及线程优先级。通过这篇文章,您可以对三个知识有更深入的了解,其中线程优先级讲究概率,也就是即使你的优先级很高,也有可能被优先级低的抢到。线程的优先级属于多线程里面的,多线程在大学Java课程里非常重要,尽管我们当时没有学的很深入,后面的守卫线程都没有学,但是线程优先级是非常基础的一个知识。内部类则可以简化代码,内部类(Inner Class),是 Java 中对类的一种定义方式,是嵌套类的一个分类,即非静态嵌套类(Non-Static Nested Class)。内部类(非静态嵌套类)分为成员内部类、局部内部类和匿名内部类三种。有些知识我们可以不用,但之所以还学习他,就是防止其他人用的时候我们看不懂。所以还是有学习的必要的。


一、内部类

1、内部类,在类中再写一个类,可以调用外部类的私有方法,私有属性

2、静态内部类,在内部类前加关键字static,不能调用外部类的非静态属性、方法

3、局部内部类,写在方法里面(不建议使用)

4、匿名内部类

列代码如下:
内部类只能通过外部类实例化的对象来调用。

public class Demo05 {
    public static void main(String[] args) {
        Demo04 outer = new Demo04(18);
        Demo04.A b = outer.new A();
        b.getAge();
 
//        new Demo04(18);//匿名类
 
    }
}
public class Demo04 {
    private int m_age;
    Demo04(int a)
    {
        m_age = a;
    }
    public class A{
        public void getAge()
        {
            System.out.println(m_age);
        }
    }
}

静态内部类以及局部内部类

public class Demo06 {
    int age;
    static int b;
    public static class B{//静态内部类,无法访问非静态的属性
        public void put(){
            System.out.println(b);
             class C{//局部内部类,写在方法里面的,不建议使用
 
            }
        }
    }
}

二、线程优先级

如果线程没有没有明确优先级的话,系统会默认分配给了一个5的优先级。优先级:从1~10,其他的都是不合法的,优先级越高,代表这个线程先被调用的概率越高,优先级为10的线程,不一定比优先级为5的线程先执行,只是比他先执行的概率高。总结:1、线程优先级高的不一定先执行,只是概率高 2、先设置优先级,再start()

常用方法:

   setPriority(int )设置优先级,填数字1~10之间;或者用系统自带的
    Thread.NORM_PRIORITY(5),Thread.MIN_PRIORITY(1),                      Thread.MAX_PRIORITY(10)
    getPriority() 获取该线程的优先级
    

例子:

public class Demo11 {
    public static void main(String[] args) {
        Test test = new Test();
        Thread thread = new Thread(test);
        Thread thread1 = new Thread(test);
        Thread thread2 = new Thread(test);
        thread2.setPriority(Thread.MIN_PRIORITY);
        thread2.start();
        thread.setPriority(Thread.NORM_PRIORITY);
        thread.start();
        thread1.setPriority(Thread.MAX_PRIORITY);
        thread1.start();
    }
}
class Test implements Runnable{
 
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+"的优先级为"+Thread.currentThread().getPriority());
    }
}

三、File类

Java文件类以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等。

File对象代表磁盘中实际存在的文件和目录。

常用方法:

1、判断存不存在

    fps.exist();//返回的是Boolean类型,需要用一个Boolean来接受

    2、创建文件

    fps.creatNewFile();//需要处理一下异常

    3、创建单级目录

    fps.mkdir();

    4、创建多级目录

    fps.mkdirs(); //既可以创建单级目录,也可以创建多级目录

    5、获取父文件的路径

    fps.getParent();//返回的是一个字符串类型,需要用一个字符串来接收

    fps.getParentFile();//返回的是文件,包括大小和姓名

    6、获取绝对路径

    fps.getParentFile.getAbstractPath();//获得父文件的绝对路径

    7、获取文件名

    fps.getName()

    8、判断是不是目录

    fps.isDirectory();

    9、判断是不是文件

    fps.isFile();

    10、获取文件最后一次的修改时间

    long time = fps.lastModified(); //返回来的是long类型,而且是时间戳,即从1970.1.1到现在的毫秒数

    11、将时间戳转化为日期

    SimpleDateFormat sdf =new SimpleDateFormat("yyyy-mm-dd HH:mm:ss sss");

    String strTime = sdf.format(time);

    12、获取文件的大小

    fps.length();//返回来的是数值型的,大小是字节

    13、获取当前目录下的所有子路径

    File[] files = fps.listFiles();

    for(File file : files)

    {

    System.out.println(file.getName());
    }
import java.io.File;
 
public class DirList {
    public static void main(String args[]) {
        String dirname = "/java";
        File f1 = new File(dirname);
        if (f1.isDirectory()) {
            System.out.println("Directory of " + dirname);
            String s[] = f1.list();
            for (int i = 0; i < s.length; i++) {
                File f = new File(dirname + "/" + s[i]);
                if (f.isDirectory()) {
                    System.out.println(s[i] + " is a directory");
                } else {
                    System.out.println(s[i] + " is a file");
                }
            }
        } else {
            System.out.println(dirname + " is not a directory");
        }
    }
}

总结

File

一个File对象代表硬盘中实际存在的一个文件或者目录。 无论该路径下是否存在文件或者目录,都不影响File对象的创建

内部类

内部类就是在一个类的内部定义一个类。比如在A中定义了一个B类,那么B类性对于A类来说就称为内部类。而A类相对于B类来说就是外部类了。
1、成员内部类
2、静态内部类
3、局部内部类
4、匿名内部类‘

线程优先级

尽管设置了优先级,但是依然有优先级低的线程在优先级高的线程前面执行,所以优先级低只是意味着获得调度的概率低并不是优先级低就不会被调用,这都是看CPU的调度。

通过本次文章的整理,使得我对四种内部类、File类、优先级的理解进一步加深。深刻的感受到了写博客的重要性,查缺补漏,能够让自己清晰的认识到哪里掌握了,哪里没掌握,就像自己的一个好朋友一样督促自己去更深入的学习,更深入的研究底层,更深入的反复尝试,今天把自己从前的学习历程翻出来记录在CSDN,希望能够帮到各位读者。如果喜欢我的文章,希望您能给我一个一键三连哦。
在这里插入图片描述

相关文章
|
8天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者
|
10天前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
10天前
|
安全 Java Kotlin
Java多线程——synchronized、volatile 保障可见性
Java多线程中,`synchronized` 和 `volatile` 关键字用于保障可见性。`synchronized` 保证原子性、可见性和有序性,通过锁机制确保线程安全;`volatile` 仅保证可见性和有序性,不保证原子性。代码示例展示了如何使用 `synchronized` 和 `volatile` 解决主线程无法感知子线程修改共享变量的问题。总结:`volatile` 确保不同线程对共享变量操作的可见性,使一个线程修改后,其他线程能立即看到最新值。
|
10天前
|
消息中间件 缓存 安全
Java多线程是什么
Java多线程简介:本文介绍了Java中常见的线程池类型,包括`newCachedThreadPool`(适用于短期异步任务)、`newFixedThreadPool`(适用于固定数量的长期任务)、`newScheduledThreadPool`(支持定时和周期性任务)以及`newSingleThreadExecutor`(保证任务顺序执行)。同时,文章还讲解了Java中的锁机制,如`synchronized`关键字、CAS操作及其实现方式,并详细描述了可重入锁`ReentrantLock`和读写锁`ReadWriteLock`的工作原理与应用场景。
|
11天前
|
安全 Java 编译器
深入理解Java中synchronized三种使用方式:助您写出线程安全的代码
`synchronized` 是 Java 中的关键字,用于实现线程同步,确保多个线程互斥访问共享资源。它通过内置的监视器锁机制,防止多个线程同时执行被 `synchronized` 修饰的方法或代码块。`synchronized` 可以修饰非静态方法、静态方法和代码块,分别锁定实例对象、类对象或指定的对象。其底层原理基于 JVM 的指令和对象的监视器,JDK 1.6 后引入了偏向锁、轻量级锁等优化措施,提高了性能。
35 3
|
11天前
|
存储 安全 Java
Java多线程编程秘籍:各种方案一网打尽,不要错过!
Java 中实现多线程的方式主要有四种:继承 Thread 类、实现 Runnable 接口、实现 Callable 接口和使用线程池。每种方式各有优缺点,适用于不同的场景。继承 Thread 类最简单,实现 Runnable 接口更灵活,Callable 接口支持返回结果,线程池则便于管理和复用线程。实际应用中可根据需求选择合适的方式。此外,还介绍了多线程相关的常见面试问题及答案,涵盖线程概念、线程安全、线程池等知识点。
92 2
|
19天前
|
安全 Java API
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
46 6
|
27天前
|
安全 算法 Java
Java多线程编程中的陷阱与最佳实践####
本文探讨了Java多线程编程中常见的陷阱,并介绍了如何通过最佳实践来避免这些问题。我们将从基础概念入手,逐步深入到具体的代码示例,帮助开发者更好地理解和应用多线程技术。无论是初学者还是有经验的开发者,都能从中获得有价值的见解和建议。 ####
|
8天前
|
Java
【JavaEE】——多线程常用类
Callable的call方法,FutureTask类,ReentrantLock可重入锁和对比,Semaphore信号量(PV操作)CountDownLatch锁存器,
|
8天前
|
Java 程序员 调度
【JavaEE】线程创建和终止,Thread类方法,变量捕获(7000字长文)
创建线程的五种方式,Thread常见方法(守护进程.setDaemon() ,isAlive),start和run方法的区别,如何提前终止一个线程,标志位,isinterrupted,变量捕获