JAVA开发性能提升

StringBuilder有两个常用方法。

字符串相加推荐使用StringBuilder
因为String类型声明为final,不可更改的常量。所以计算机在处理String相加时,需要创建多个String去完成相加功能。而StringBuilder与String的区别就在于,是一个可变的byte[]数组,只需要分配一个内存地址即可。初始长度为16,如超出则会自动进行扩容。
估:声明可变字符串时,最好使用StringBuilder。

  • append()
    举例:
StringBuilder a = new StringBuilder();
StringBuilder b = a.append("hahah");
if(a == b){
}

此处:相当于将给a追加后,将a的地址赋值给b,所以a和b是相等的。
所以再使用append方法时,无需接收返回值。
  • toString()
    将StringBuilder转为String类型

数组使用

  • ArrayList 底层数据结构为数组结构, 查询快,增删慢
  • LinkedList 底层数据结构为链表结构,查询慢,增删快

估:频繁使用查询的则使用ArrayList,
频繁使用增删的则使用LinkedList

List、Map、Set对象

在jdk9新特性中,增加了一个静态of()方法,可以给集合一次性添加多个元素
注意:1.of()方法,只适用于List、Map、Se接口,不适用于接口实现类
2.of()方法,返回的为一个不能改变的集合。

jdk8我们之前添加 
List array = new List();
array.add("a");
array.add("b");
array.add("b");
jdk9:
List array = new List();
array.of("a","b","c");

java异常

通过判断想要告诉方法的调用者,存在问题的时候,我们就可以抛出异常
举例:
如查找文件路径 “c:/a.txt”

	getFileName(name){
		if(!name.equlas("c:/a.txt")){
			throw new FileNotFoundException("文件找不到.");
		}
	}
  1. throws 声明异常
    1.调用的方法中存在异常抛出,则需要声明异常,可自己处理,也可以交予JVM处理
    JVW处理,则是调用的父方法一直抛出异常。
  2. try…catch 处理异常
  3. throwable
    异常处理类,定义了三个异常处理方法
    1.getMessage()。 返回简短异常信息
    2.toString(). 返回详细消息字符串
    3.printStackTrace(). JVM打印异常对象,默认使用此方法,打印信息最全面
		try{
 			可能产生异常的代码
 		}catch(定义一个异常变量,用于接收try中抛出的异常对象){
	 		异常的处理逻辑,产生异常对象后,如何处理异常。
	 		一般在工作中,我们会把异常信息记录到日志中,方便我们后续查看。
 		}
 		....
 		catch(){
 			catch可存在多个
 		}
 		注意:1.try中可能会抛出多个异常对象,那么我们可以使用多个catch来接收处理异常
 			 2.如果try中产生异常,那么就会执行catch中的异常处理逻辑,执行完毕后,会继续执行try..catch后的代码

估:上面两种在选择时,
1.throws抛出异常后,交给JVM处理,完后不会执行后续代码
2.try’…catch抛出异常,处理异常完成后,会继续执行后续代码

多线程

  1. 并发 指两个或多个事件在同一时间段内发生。(交替执行) 速度慢
    举例:一个人吃两个馒头。 一个cup执行
  2. 并行 指两个或多个事件在同一时刻发生。(同时执行) 速度高
    举例:两个人一人一个馒头。 两个cup执行

进程:指一个应用中运行的应用程序。打开一个应用程序,都会跑到内存中去执行。关闭程序,则会再次从内存中去除。所有内存越大,程序运行速度越快。

线程:线程是进程中的一个执行单元。负责当前进程中执行的程序。一个进程可存在多个线程,则被称为多线程程序。简而言之:一个程序运行后至少后一个进程,一个进程可以包含多个线程。

程序中:多线程
Thread
1.定义一个多线程类集成Thread类
2.重写Thread类中的run()方法。
3.创建自定义线程类对象,调用start方法。创建线程。

Main()方法为主线程
新创建的线程,从thread-0,thread-1,thread-2
内存处理时,main创建一个栈内存,thread-0创建一个栈内存。
(创建的对象存储在堆内存中)

解决线程安全问题

线程同步技术解决线程安全问题

  1. 同步代码块
    synchronized(同步锁){
    可能会出现线程安全的代码(访问共享数据的代码)
    }
    注意:1.通过代码块中的锁对象,可以是任意对象
    2.但必须保证多个线程使用的锁对象是同一个对象。
    3.锁对象作用:
    将同步代码块锁住,只让一个线程在同步代码块中执行
    缺点:程序频繁的判断锁,获取锁,释放锁,降低了程序效率。
  2. 同步方法
    public synchronized void method(){
    可能会出现线程安全的代码(访问共享数据的代码)
    }
  3. 锁机制
    1.创建锁 Lock l = new ReentrantLock();
    2.获取锁 调用线程安全代码块前使用lock()方法,l.lock();
    3.释放锁 调用线程安全代码块后使用unlock()方法,l.unlock();
    unlock一般写在finally代码块内
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值