- 字符串
1.1 字符串拼接相关问题
1 常量+常量 结果常量池
2 常量与变量 或 变量与变量 结果堆
3 拼接后调用intern()方法:结果在常量池
4 concat方法拼接,结果都是在堆
1.2 字符编码转变
new String(str.getBytes(“UTF-8”), “UTF-8”);
1.3 正则匹配
^[验证规则]{验证次数}$ ^开始 $结束
1.4 字符串操作其他方法
a 替换
replace(“要替换的内容”,“替换成内容”) 不支持正则
replaceFirst(“要替换内容(正则)”,“替换成内容”) 支持正则
replaceAll(“要替换内容(正则)”,“替换成内容”) 替换所有匹配部分
b 拆分
String s = “a-b-c-d”;
String[] sp = s.split("-");
Arrays.toString(sp);
2. 日期-时间
Date date = new Date()
data.getTime(); = System.currentTimeMills();
SimpleDateFormat simpleDateFormat = new SimpleDateFromat("yyyy年MM月dd日 HH时mm分ss秒 SSS毫秒");
String dateTime = simpleDateFormat.format(date);
- 多线程
a 并发与并行
并发:两个事件或多个事件在同一个时间段运行。(抢票,多人同时操作一个资源)
并行:两个或多个事件在同一时刻进行。(多项工作一起执行,最后汇总)
b 进程与线程
进程:占用内存空间的软件或应用
线程:进程执行单元,一个进程里有多个线程
c 调度方式
分时调度: 平均分配每个线程占用CPU的时间
抢占式调度: 优先级高的线程使用CPU,优先级相同则随机选择,JAVA的调度方式为抢占式调度
2.1 创建线程方式
获得当前线程名称:Thread.currentThread().getName();
第一种: 继承Thread类,重写run()方法,new类,调用start()方法
第二种: 实现Runnable接口,重写run()方法,new类, new Thread()对象,将Thread对象传入new类中,并且传入对应的名字,进行start()
第三种: 实现Callable接口
第四种: 使用线程池创建
2.2 Thread类常用方法
(1)run方法:执行线程具体操作
(2)start方法:启动线程
(3)sleep方法:暂停线程
(4)join方法: 插队
2.3 线程安全
前提:多个操作同时进行时发生线程安全
1. 同步代码块
synchronized(){}
synchronized (this){
if (tickets <= 30) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" 卖的是第"+(tickets++)+"张票");
}
}
2 同步方法
public synchronized void saleTickets() {}