java基础的详细了解第八天

Java基础的详细了解第八天攻略

一、多线程

1. 线程的创建(继承Thread类)

Java中创建线程有两种方式,一种是继承Thread类,另一种是实现Runnable接口。第一种方式的具体代码如下:

class MyThread extends Thread {
    @Override
    public void run() {
        // 线程要执行的代码
    }
}

其中,run方法中写的是线程要执行的代码。线程启动,只需要创建一个MyThread的实例,并调用start()方法即可。

MyThread thread = new MyThread();
thread.start();

2. 线程的创建(实现Runnable接口)

另外一种创建线程的方式是实现Runnable接口。具体代码如下:

class MyRunnable implements Runnable {
    @Override
    public void run() {
        // 线程要执行的代码
    }
}

同样,线程启动也只需要创建一个MyRunnable实例,并调用start()方法即可。

MyRunnable r = new MyRunnable();
Thread thread = new Thread(r);
thread.start();

3. 线程的生命周期

线程的生命周期包括6个状态:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、等待(Waiting)和终止(Terminated)。

其中,新建状态指线程创建后还未调用start()方法的状态;就绪状态指线程调用start()方法后,等待CPU资源的状态;运行状态指CPU正在执行该线程的状态;阻塞状态指线程由于某些原因(如获取锁失败、IO操作等)暂时停止执行的状态;等待状态指线程进入等待状态后,需要等待其他线程的通知才能继续执行;终止状态表示线程执行完毕的状态。

4. 线程同步

线程同步是指非常多线程访问共享资源时的一种机制。

Java中提供了synchronized关键字和Lock接口实现线程同步,其实现机制是通过对象的锁来保护关键代码块避免多线程对共享资源的争抢。

class SynchronizedDemo {
    private int count = 0;

    public synchronized void add() {
        count++;
    }
}

在上述代码中,add()方法被synchronized修饰,同步加锁,就可以保证同时最多只有一个线程可以执行该方法。

5. 线程池

线程池主要解决线程生命周期(线程的创建、销毁)开销大,线程数量过多导致系统负载过重等问题。线程池可以将大量任务分给少量线程处理,处理完成后,线程不会被销毁,而是继续保留在池中等待下一次使用。

Java中提供了ThreadPoolExecutor类实现线程池,其具体代码如下:

ExecutorService executorService = new ThreadPoolExecutor(5, 10,
                60L, TimeUnit.SECONDS,
                new LinkedBlockingQueue<Runnable>());

其中,参数的意义分别为:线程池核心线程数、线程池最大线程数、线程池空闲线程存活时间、单位时间、阻塞队列。

在使用时,只需要将Runnable任务提交到线程池中即可:

executorService.execute(new MyRunnable());

二、输入输出流

1. Java IO概述

Java IO是指Java的输入输出,负责程序与外界的交流。Java中的IO系统分为三个部分:字节流、字符流、输入/输出流(包括控制台输入输出和文件输入输出)。

Java中的IO操作以字节为单位,即每个创建的字节流对应一个8位二进制字节序列,而输入/输出操作都是基于流的。

2. 字节流

字节流是Java IO操作中的第一种流,用于操作二进制文件,输入输出操作以字节为单位。

Java中的字节流共包含4个类:InputStream/BufferedInputStream/FileInputStream和OutputStream/BufferedOutputStream/FileOutputStream。

例如,使用FileInputStream读取二进制文件代码如下:

FileInputStream fis = null;
try {
    fis = new FileInputStream("file.bin");
    int n = -1;
    while ((n = fis.read()) != -1) {
        // 处理字节数组
    }
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        if (fis != null) {
            fis.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

3. 字符流

字符流用于操作文本文件,输入输出操作以字符为单位,一次可以读取多个字符。

Java的字符流共包含4个类:Reader/BufferedReader/FileReader和Writer/BufferedWriter/FileWriter。

例如,使用FileReader读取文本文件并输出文件内容的代码如下:

FileReader fr = null;
try {
    fr = new FileReader("file.txt");
    int n = -1;
    while ((n = fr.read()) != -1) {
        // 处理字符
    }
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        if (fr != null) {
            fr.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

以上是Java基础的详细了解第八天的攻略,其中包括了多线程和输入输出流两部分内容,希望可以帮助到学习Java的同学们。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java基础的详细了解第八天 - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • 如何使用JavaMail发送邮件

    使用JavaMail发送邮件需要以下步骤: 步骤一:添加JavaMail依赖 在项目中添加JavaMail的依赖包,例如使用Maven可以添加以下依赖: <dependency> <groupId>javax.mail</groupId> <artifactId>javax.mail-api</artif…

    Java 2023年6月15日
    00
  • SpringMVC学习之JSON和全局异常处理详解

    SpringMVC学习之JSON和全局异常处理详解 JSON 什么是JSON JSON是一种轻量级的数据交换格式,它的设计是为了易于阅读和编写。JSON是基于JavaScript的一个子集,可以用于表示简单的数据结构和对象,常用于Web前端和服务器之间的数据传输。 在SpringMVC中使用JSON SpringMVC内置了MappingJackson2Ht…

    Java 2023年5月26日
    00
  • java文件上传(单文件 多文件)与删除

    下面详细讲解一下Java文件上传(单文件、多文件)与删除的完整攻略。 文件上传 单文件上传 单文件上传是指用户选择一个文件并上传到服务器。下面是代码示例。 HTML部分 <form action="upload" method="post" enctype="multipart/form-data&qu…

    Java 2023年5月20日
    00
  • java工程师进阶之MyBatis延迟加载的使用

    Java工程师进阶之MyBatis延迟加载的使用攻略 MyBatis是Java中常用的一款ORM框架,它能够简化Java与关系型数据库的交互,提高工作效率。MyBatis在优化查询性能方面表现尤为突出,其中延迟加载技术尤为重要。本篇攻略将重点介绍MyBatis中的延迟加载技术的使用方法及技巧。 什么是MyBatis的延迟加载 MyBatis的延迟加载(Laz…

    Java 2023年5月20日
    00
  • JSP、Servlet中get请求和post请求的区别总结

    JSP、Servlet中get请求和post请求的区别总结 在使用JSP和Servlet的过程中,我们经常会使用到HTTP的GET和POST请求方式。这两种方式虽然都是常用的HTTP请求方式,但是在使用上有所区别。 GET请求通常用于获取数据,而POST请求通常用于提交数据。其中GET请求是通过URL传输数据的,而POST请求是通过HTTP的消息主体传输数据…

    Java 2023年6月15日
    00
  • LibrarySystem图书管理系统开发(一)

    LibrarySystem图书管理系统开发(一) 概述 本文介绍了一种设计和开发图书管理系统的方法,该系统使用Python编程语言和Django框架开发。 需求 我们的图书管理系统需要具备以下功能: 添加/编辑/删除图书 添加/编辑/删除图书分类 借阅/归还图书 搜索图书 管理员登录 设计 数据库设计 我们需要至少两个相关的数据库表来存储数据: Book 和…

    Java 2023年5月30日
    00
  • Java多线程案例之阻塞队列详解

    Java多线程案例之阻塞队列详解 什么是阻塞队列? 阻塞队列(Blocking Queue)是一个支持在队列的两端进行插入与删除的队列。常用的阻塞队列有ArrayBlockingQueue、LinkedBlockingQueue等。阻塞队列在多线程的场景下常被使用,因为当队列为空或达到容量上限时,线程往往会被阻塞。在队列空的情况下,从队列中获取元素的操作将会…

    Java 2023年5月18日
    00
  • Spring Boot深入分析讲解日期时间处理

    Spring Boot深入分析讲解日期时间处理 导言 在Spring Boot应用中,常常需要处理日期时间。本文将介绍Java针对日期时间的处理方式,并重点介绍了Spring Boot提供的日期时间处理方式。 Java日期时间处理 Java提供了两套日期时间处理方式: java.util.Date和java.util.Calendar java.time提供…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部