二进制输入输出流,序列化和反序列化,多线程,Thread类

发布于:2023-01-12 ⋅ 阅读:(408) ⋅ 点赞:(0)

DataInputStream类(FilterInputStream类的子类)

        与FileInputStream类结合使用读取二进制文件

DataOutputStream类(FilterOutputStream类的子类,FilterOutputStream类继承OutputStream类)

        与FileOutputStream类结合使用写二进制文件

ObjectInputStream类(InputStream类的子类)

        反序列化则是从特定的流中获取数据重新构建对象的过程

                实现步骤:1.实现Serializable接口

                                 2.创建对象输出流

                                3.调用readObject()方法写入文件

                                4.关闭对象输出流

ObjectOutputStream类(OutputStream类的子类)

         序列化是将对象的状态写入到特定的流中的过程

                实现步骤:1.实现Serializable接口

                                        2.创建对象输出流

                                        3.调用writeObject()方法写入文件

                                        4.关闭对象输出流

什么是多线程

如果一个进程中同时运行了多个线程,用来完成不同的工作,则称之为多线程

多线程的好处

1.充分利用CPU的资源

2.简化编程模型

3.带来良好的用户体验

主线程:Thread类

main()方法即为主线程入口

产生其他子线程的线程

必须最后完成执行,因为它执行各种关闭动作

    
        //获取线程的优先级的最大值/最小值/默认值
        System.out.println(Thread.MAX_PRIORITY);//10
        System.out.println(Thread.MIN_PRIORITY);//1
        System.out.println(Thread.NORM_PRIORITY);//5
        
        //获取当前正在运行的线程对象
        Thread thread = Thread.currentThread();
        //获取当前线程对象的名称
        String name =thread.getName();
        System.out.println("当前运行线程的名称:"+name);//mian
        //获取当前线程的id
        long num = thread.getId();
        System.out.println(num);//1
        //获取当前线程的优先级
        int priorty=thread.getPriority();
        System.out.println(priorty);//5
        
        //获取当前线程的状态
        State state= thread.getState();
        System.out.println(state);//RUNNABLE
        
        //设置线程名称
        thread.setName("葵花");
        System.out.println(thread.getName());
        
        //设置线程优先级
        thread.setPriority(8);
        System.out.println(thread.getPriority());
        
        String str =thread.toString();
        System.out.println(str);//Thread[葵花,8,main]
​

继承Thread类

一个类继承Thread类,需要重写run()方法,创建线程调用start()方法启动线程

//编写线程的第一步:创建MyThread类,继承Thread类
public class MyThread extends Thread {
    
    //第二步:重写run方法
    @Override
    public void run() {
        //第三步:在run()方法中写你想写的代码
        for (int i = 1; i <= 10; i++) {
            System.out.println(Thread.currentThread().getName()+":"+i);
        }
    }
    
    public static void main(String[] args) {
        //第四步:创建线程类对象
        MyThread mt1 = new MyThread();
        MyThread mt2 = new MyThread();
        //mt1.run
        //启动线程要使用start()方法来启动线程,如果通过线程对象直接调用run()方法,那是由主线程调用的,不是多线程的实现方法
        mt1.start();
        mt2.start();

启动线程要使用start()方法来启动线程,如果通过线程对象直接调用run()方法,那是由主线程调用的,不是多线程的实现方法

多线程并不是真正意义上的并行执行,而是多个线程交替抢占cpu资源,随获取了cpu资源就执行谁,在执行的过程中,有可能丢失cpu资源,被另一个线程执行,所以会出现交替执行的现象

实现Runnable接口创建线程

定义一个类实现Runnable接口,实现run方法,创建对象,调用strat()方法启动线程

//第一步:创建线程类实现Runnable接口
public class MyRunnable implements Runnable {
​
    @Override
    public void run() {//第二步:重写run()方法
​
        for (int i = 1; i <=10; i++) {
            //第三步:在run()方法中定义要执行的代码
            System.out.println(Thread.currentThread().getName()+":"+i);
        }
    }
    
    public static void main(String[] args) {
        //创建线程类对象
        Runnable mr = new MyRunnable();
        // MyRunnable类中没有start()方法,其父类Object类中也没有start()方法,其实现的接口Runnable中只有run()方法,没有start()方法
                // mr.start();
        Thread thread = new Thread(mr,"葵花点穴瘦");
        thread.start();
        Thread t1 = new Thread(mr,"排山倒还");
        t1.start();
        
    }
​
​

网站公告

今日签到

点亮在社区的每一天
去签到