在Date后引入的Calendar也不能很好的规范时间的数据类型,
在JDK8.0时引入了Time这一新的包
方法不用背,现用现查也可以
之前存在的问题
Date和Calendar修改时间时,本身的数值也会改变。如果保留原数值还要备份,很麻烦。
偏移量,创建时间的年份会自动加1970年。 如果创建参数是2000,创建出来就会是3970年。很麻烦
格式化,S...
System类的currentTimeMillis()
获取当前时间的毫秒,long类型,时间戳
当前时间与1970年1月1日之间的毫秒数
两个Date类
java.util.Date
public classDateDemo {
public static void main(String[] args) {
Date ...
总的来说
就是StringBuffer和StringBuilder比String增加了可更改性质
StringBuffer和StringBuilder的区别就是jdk5.0后增加的Stringbuilder线程不安全,没有synchronized修饰,但是它的效率要高。
三各类的对比
String
StringBuffer
StringBuilder
...
类的声明
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
final:不可被继承、
Serializable:可序列化的接口。---凡是实现序列化接口的类就可以通过网络、IO流进行传输。
Compar...
joulemeter
下载地址:https://joulemeter.cn.uptodown.com/windows/post-download/1548
在JUC高并发中会有详细讲解
现有问题
并发线程很多,有很多线程执行的时间很短,就需要频繁的创建和销毁,使得系统效率降低。
思路
提前创建好多个线程,放入线程池,使用时直接提取,使用后放回线程池,增加线程的复用性。
好处
提高了程序执行的效率。
线程提前创建好
提高资源复用率
可以设置相关参数对池中线程使用进行管理
例子
import java.util...
Callable同Runnable一样是个接口,实现该接口并实现call方法,将同步代码放入call方法中
使用它的好处是可以在方法抛出异常,无需再方法内部处理了,否则try catch太多
它还可以有返回值类型,无需返回就返回一个null
Callable
Runnable
灵活,使用throws处理异常
可以有返回值
使用了泛型...
密匙:J8WVF-9X3GM-4WVYC-VDHQG-42CXT
(1)到系统输入密匙
(2)win+R, 输入powershell, 回车, 再在弹出的窗口内输:
irm https://get.activated.win | iex
irm massgrave.dev/get.ps1 | iex
(3)弹出窗口选[1]
(4)回到系统查看会显示”激活成...
概念
当需要多个线程共同完成一个任务时,需要它们有规律的执行,多个线程之间需要一些通信的机制,以实现共同操作一份数据。
说是通讯机制,并不是让线程之间会交流讲话,而是用几个方法来控制线程直线通断的顺序。
例如:线程a生产包子,线程b负责吃包子。b线程就需要等a线程执行完毕才可以执行。
实例,两个线程交替打印100以内的数字
使用notify和wait方法交替...
概念
不同的线程都在等待对方的线程结束而不放弃,造成了大家都在等待情况叫做死锁。
public class deadLocker {
public static void main(String[] args) {
StringBuilder sb1=new StringBuilder();
StringBuilde...
之前讲的单例模式中的懒汉模式是在调用时才会生成一个对象以供使用,
为了防止同时多个线程创建多个对象就需要考虑到线程安全的问题。
方式一:
给getInstance()添加synchronized符号
public class BankTest {
static Bank b1=null;
static Bank b2=null;
pu...
synchronized通常作为本地锁,分布式项目下要用分布式锁。
线程的安全问题与线程的同步机制
类似于数据库的脏读幻读的情况
卖票时出现了重复卖票和错票的情况
什么原因导致的?在线程处理未结束的情况下其他线程参与进来,同样对票数进行了操作。
如何解决?需要在线程a操作票数的情况下,其他线程必须等待,直至a操作结束。
Java是如何解决线程安全问题的?使...
Thread构造器
public Thread():分配一个新的对象
public Thread(String name):分配一个指定名字的新线程对象
public Thread(Runnable target):指定创建线程的对象,它实现了Runnable中run()方法
public Thread(Runnable target,String name...
两种创建多线程方式
继承Thread类
实现Runnable接口
继承thread类
创建一个继承Thread类的子类
重写Thread类的run()方法
创建当前Thread类子类的对象
通过对象调用start方法
public class EvenNumberTest {
public static void main(String[] ...