首页 > 编程语言 >Java核心技术学习笔记(四)

Java核心技术学习笔记(四)

时间:2024-07-08 11:32:51浏览次数:10  
标签:Java synchronized 核心技术 模式 sourceChannel 笔记 new public

一、Java有几种文件拷贝方式

Java有多种比较典型的文件拷贝实现方式,比如:
利用java.io类库,直接为源文件构建一个FileInputStream读取,然后再为目标文件构建一个FileOutputStream,完成写入工作。

 public satic void copyFileByStream(File source, File des) throws IOException {
    try (InputStream is = new FileInputStream(source);
         OutputStream os = new FileOutputStream(des);){
        byte[] bufer = new byte[1024];
        int length;
        while ((length = is.read(bufer)) > 0) {
            os.write(bufer, 0, length);
        }
    }
}

或者,利用java.nio类库提供的transferTo或transferFrom方法实现。

 public satic void copyFileByChannel(File source, File des) throws
        IOException {
    try (FileChannel sourceChannel = new FileInputStream(source).getChannel();
         FileChannel targetChannel = new FileOutputStream(des).getChannel();){
        for (long count = sourceChannel.size() ;count>0 ;) {
            long transferred = sourceChannel.transferTo(
                    sourceChannel.position(), count, targetChannel); sourceChannel.position(sourceChannel.position() + transferred);
            count -= transferred;
        }
    }
}

当然,Java标准类库本身已经提供了几种Files.copy的实现。
对于Copy的效率,这个其实与操作系统和配置等情况相关,总体上来说,NIO transferTo/From的方式可能更快,因为它更能利用现代操作系统底层机制,避免不必要拷贝和上下
文切换。

二、接口和抽象类有什么区别

接口和抽象类是Java面向对象设计的两个基础机制。
接口是对行为的抽象,它是抽象方法的集合,利用接口可以达到API定义和实现分离的目的。接口,不能实例化;不能包含任何非常量成员,任何feld都是隐含着public static
fnal的意义;同时,没有非静态方法实现,也就是说要么是抽象方法,要么是静态方法。Java标准类库中,定义了非常多的接口,比如java.util.List。
抽象类是不能实例化的类,用abstract关键字修饰class,其目的主要是代码重用。除了不能实例化,形式上和一般的Java类并没有太大区别,可以有一个或者多个抽象方法,也可
以没有抽象方法。抽象类大多用于抽取相关Java类的共用方法实现或者是共同成员变量,然后通过继承的方式达到代码复用的目的。Java标准库中,比如collection框架,很多通用
部分就被抽取成为抽象类,例如java.util.AbstractList。

三、设计模式

大致按照模式的应用目标分类,设计模式可以分为创建型模式、结构型模式和行为型模式。
创建型模式,是对对象创建过程的各种问题和解决方案的总结,包括各种工厂模式(Factory、Abstract Factory)、单例模式(Singleton)、构建器模式(Builder)、原型模
式(ProtoType)。
结构型模式,是针对软件设计结构的总结,关注于类、对象继承、组合方式的实践经验。常见的结构型模式,包括桥接模式(Bridge)、适配器模式(Adapter)、装饰者模式
(Decorator)、代理模式(Proxy)、组合模式(Composite)、外观模式(Facade)、享元模式(Flyweight)等。
行为型模式,是从类或对象之间交互、职责划分等角度总结的模式。比较常见的行为型模式有策略模式(Strategy)、解释器模式(Interpreter)、命令模式(Command)、
观察者模式(Observer)、迭代器模式(Iterator)、模板方法模式(Template Method)、访问者模式(Visitor)。

手写单例:
饿汉单例模式:

public class Singleton1{
private Singleton1(){}
private static final Singleton1 single = new Singleton1();
public static Singleton1 getInstance(){
    return single;
}

}
懒汉单例模式:

public class Singleton2{
private Singleton2(){}
private static Singleton2 single = null;
public synchronized static Singleton2 getInstance(){
    if(single == null){
        single = new Singleton2();
    }
    return single;
}

}

Spring如何在API设计中使用设计模式:
BeanFactory和ApplicationContext应用了工厂模式。
在Bean的创建中,Spring也为不同scope定义的对象,提供了单例和原型等模式实现。
AOP则是使用了代理模式、装饰器模式、适配器模式等。
各种事件监听器,是观察者模式的典型应用。
类似JdbcTemplate等则是应用了模板模式。

五、synchronized和ReentrantLock有什么区别

synchronized是Java内建的同步机制,所以也有人称其为Intrinsic Locking,它提供了互斥的语义和可见性,当一个线程已经获取当前锁时,其他试图获取的线程只能等待或者阻
塞在那里。
在Java 5以前,synchronized是仅有的同步手段,在代码中, synchronized可以用来修饰方法,也可以使用在特定的代码块儿上,本质上synchronized方法等同于把方法全部语
句用synchronized块包起来。
ReentrantLock,通常翻译为再入锁,是Java 5提供的锁实现,它的语义和synchronized基本相同。再入锁通过代码直接调用lock()方法获取,代码书写也更加灵活。与此同
时,ReentrantLock提供了很多实用的方法,能够实现很多synchronized无法做到的细节控制,比如可以控制fairness,也就是公平性,或者利用定义条件等。但是,编码中也需
要注意,必须要明确调用unlock()方法释放,不然就会一直持有该锁。
synchronized和ReentrantLock的性能不能一概而论,早期版本synchronized在很多场景下性能相差较大,在后续版本进行了较多改进,在低竞争场景中表现可能优
于ReentrantLock。

标签:Java,synchronized,核心技术,模式,sourceChannel,笔记,new,public
From: https://www.cnblogs.com/youSeeAgain/p/18289563

相关文章

  • java-spring boot光速入门教程(超详细!!)
    目录一、引言1.1初始化配置1.2整合第三方框架1.3后期维护1.4部署工程1.5敏捷式开发二、SpringBoot介绍springboot2.1搭建一个springboot工程2.2使用idea创建项目2.3在线创建姿势2.4项目的目录结构2.5项目的运行方式2.6yml文件格式2.7多环境配置2......
  • Java笔试|面试 —— 对多态性的理解
    谈谈对多态性的理解:一个事物的多种形态(编译和运行时状态不一致性)实现机制:通过继承、重写和向上转型(Objectobj=new子类())来实现。1.广义上的理解子类对象的多态性,方法的重写;方法的重载;子类对象的多态性:编译时是父类对象,运行时是不确定的子类对象。(体现不一致性)......
  • Java核心技术学习笔记(三)
    一、谈谈Java反射机制,动态代理是基于什么原理?反射机制是Java语言提供的一种基础功能,赋予程序在运行时自省(introspect,官方用语)的能力。通过反射我们可以直接操作类或者对象,比如获取某个对象的类定义,获取类声明的属性和方法,调用方法或者构造对象,甚至可以运行时修改类定义。动态代......
  • Java核心技术学习笔记(一)
    面向对象三大特征封装:把客观的事物封装成抽象的类,有自己的属性及方法继承:是一种能力,可以使用现有类的功能,并可以再次基础上进行类功能的拓展1、多态:将子类传入父类的参数引用2、五大基本原则单一职责原则:一个类只做一件事,只有一个引起它变化的原因开放封闭原则:对拓展开放、......
  • Java核心技术学习笔记(二)
    1、字符串的不可变的体现:缓存:两个内容相同的字符串变量在字符串池中指向同一个字符串对象,保证修改其中一个,另一个不会改变安全性:敏感数据存储成字符串,保证数据唯一准确性线程安全:不可变性会自动使字符串成为线程安全的hashCode缓存:在String类中被重写,以方便缓存,确保返回相同的......
  • Java计算机毕业设计的软件推荐平台(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,软件应用已成为人们日常生活和工作中不可或缺的一部分。然而,面对海量的软件资源,用户往往难以快速找到符合自身需求的软件,同时......
  • Java计算机毕业设计的思政分享平台(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在全球化与信息化高速发展的今天,思想政治教育面临着前所未有的挑战与机遇。一方面,多元文化的交融与碰撞使得青年学生的思想观念更加复杂多样;另一方面......
  • Java计算机毕业设计的图书管理系统(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和知识经济的兴起,图书馆作为知识传播与存储的重要机构,其管理效率与服务质量直接关系到读者的满意度与知识获取的便捷性。传统......
  • 数据库和JDBC:Java中的数据库操作与连接池管理
    引言在Java应用程序中,数据库操作是一项基本且关键的功能。Java数据库连接(JDBC)是Java语言中用于执行SQL语句的API,它提供了一种标准的方法,用于连接和操作数据库。此外,数据库连接池是提高数据库操作性能的重要工具,它允许多个客户端共享一个固定数量的数据库连接,而不是为每个用户......
  • 微服务架构:设计理念、优势与Java技术栈实践
    引言        微服务架构是一种软件开发架构风格,它将一个单一的应用程序划分为一组小型、松散耦合的服务。每个服务实现特定的业务功能,并通过轻量级的通信机制(通常是HTTPRESTfulAPI)进行交互。微服务架构在近年来逐渐成为构建大型、复杂系统的首选方法。本文将介绍微......