JavaSE自学笔记整理(六)
来源:互联网 发布:淘宝固定悬浮导航 编辑:程序博客网 时间:2024/05/18 02:05
一、system类
主要用于获取系统的属性数据 常用的方法: arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 、 src - 源数组。 srcPos - 源数组中的起始位置。 dest - 目标数组。 destPos - 目标数据中的起始位置。 length - 要复制的数组元素的数量。 currenYimetMillis 获取系统当前时间,返回毫秒值 exit(int status) 退出jvm,参数是0表示正常退出,参数是非0表示异常退出 gc() 建议jvm尽快启动垃圾回收机器回收垃圾 finalize() 如果一个对象被垃圾回收器回收,则先调用该对象的finalize方法 getenv(String name) 获取指定的环境变量值 getProperties() 确定当前的系统属性。
二、RunTime类
该类代表了应用程序运行的环境 常用的方法: getRunTime 获取当前应用程序的运行环境对象 exec(String command) 根据指定的路径执行对应的可执行对象 freeMemory() 返回 Java 虚拟机中的空闲内存量。以字节为单位 maxMemory() 返回 Java 虚拟机试图使用的最大内存量 totalMemory() 返回 Java 虚拟机中的内存总量
三、Date、Calendar、类
Date、Calendar类都是日期类,只不过date类的方法,大部分被Calendar取代,并且Calendar类是抽象类,无法直接创建对象。 Calendar.getinstance用来获取Calendar对象 获取年月日时分秒的方法: 年:get(Calendar.YEAR) 月:get(Calendar.MONTH) 日:get(Calendar.DATE) 时:get(Calendar.HOUR_OF_DAY) 分:get(Calendar.MINUTE) 秒:get(Calendar.SECOND) 但是这并不是我们要的格式,如何编排格式呢???日期格式化类帮我们
四、SimpleDateFormat(日期格式化类)
常用方法: format(Date date, StringBuffer toAppendTo, FieldPosition pos) 将给定的 Date 格式化为日期/时间字符串,并将结果添加到给定的 StringBuffer。 parse(String text, ParsePosition pos) 解析字符串的文本,生成 Date。 例如: public static void main(String[] args){ Date date = new Date(); SimpleDateFormat simpledateformat = new SimpleDateFormat("YYYY年MM月dd日 HH时mm分ss秒"); String time = simpledateformat.format(date); System.out.println("当前时间是:"+time); //解析字符串 String birthday = "1991年12月12日 09:09:12"; //注意:字符串的格式一定要和SimpleDateFormat指定的格式相同 Date date2 = simpleDateFormat.parse(birthday); System.out.println(date2); }
五、Math类
数学类,主要提供了很多的数学公式,静态类可直接调用方法 主要方法: abs(double a) 返回 double 值的绝对值 ceil(double a) 向上取整 floor(double a) 向下取整 round(double a) 四舍五入 random() 产生一个随机数 大于等于 0.0 且小于 1.0 的伪随机 double 值。
六、线程
1.概述 进程:正在执行的应用程序,进程负责了内存空间的划分 线程:在一个进程中负责代码的执行 多线程:在一个进程中有多个线程在执行不同的任务 一个java应用程序中至少有两个线程: 1.主线程负责main方法的运行 2.垃圾回收器线程负责垃圾回收 多线程的好处: 1.解决一个进程可以多个任务同时进行 2.提高资源利用率 多线程的坏处: 1.增加cpu负担 2.降低一个进程中线程的执行概率 3.引发了线程安全问题 4.出现了死锁现象
2.创建线程的方式: 方式一: 1.自定义一个类继承Thread类 2.重写run方法. 目的:每个任务都有自己的线程代码,主线程执行main方法的代码,其他任务的代码要写run代码中 3.创建Thread子类对象,并调用start方法开启线程 注意:线程一旦开启,则会自动执行run方法中的代码,千万不能直接调用run方法 方式二:方式二: 1.自定义一个类实现runnable接口; 2.重写runnable的run()方法; 3.创建runnable实现类的对象; 4.创建Thread对象,把runnable实现类的对象传进去; 5.调用start()方法 注意:runable实现类对象并不是线程对象,只有Thread类或者继承了Thread类才是线程对象
3.线程的状态 新创建状态: 该状态是线程刚创建,还没有运行 可运行状态: 该状态是调用了start方法,可以运行啦。 运行状态: 该状态是cpu调用了该线程,进入运行 临时阻塞状态: 该状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。 可能是调用了sleep或者wait方法 死亡状态: 该状态是线程执行结束
4.线程常用的方法: Thread(String name) 初始化线程的名字 getName() 返回线程的名字 setName(String name) 设置线程对象名 sleep() 线程睡眠指定的毫秒数 静态方法 哪个线程执行了该方法,哪个线程睡眠 currentThread() 返回当前线程对象 静态方法 哪个线程调用了改方法,返回哪个线程 getPriority() 返回当前线程对象的优先级,默认的线程优先级为5 setPriority(int newPriority)设置线程的优先级 数字越大 优先级越高(优先级范围是1-10)
5.线程的同步方式 当两个或者多个线程共享一个资源时,就会出现线程打架的现象,如何避免这种现象呢,可以用同步来解决 方式一:同步代码块 格式 : synchronized(锁对象){ 需要被同步的代码; } 注意事项: 1.任何对象都可以作为锁对象; 2.在代码块中调用sleep方法,并不会释放锁对象 3.只有在真正出现线程安全问题时才使用同步代码块,否则会降低效率 线程安全出现的原因: 1.有两个及两个以上的线程存在,且共享一个资源; 2.有多个语句共同操作一个资源 4.多线程的锁对象必须是唯一共享的,否则无效(static修饰共享) 方式二:同步函数 即用synchronized修饰该函数 注意事项: 1.如果是非静态的同步函数,则锁对象是this;如果是静态同步函数,则锁对象为当前函数所属的类字节码文件(.class文件); 2.同步函数的锁对象是固定的,不能人为改 通过以上两种方式解决了线程安全的问题的同时,也会出现死锁现象,但是目前并没有解决方法,死锁不是每次都会出现,只能尽量避免
6.线程通讯 一个线程完成了自己的任务时,要通知另外一个线程去完成他的任务,典型的例子是生产者和消费者 需要用到的两个方法: wait() 等待 如果一个线程执行了wait()方法,则该线程处于等待状态,需要其他线程执行notify方法唤醒; notify() 唤醒 wait和notify方法注意的事项: 1.两个方法都是属于Object类 2.两个方法必须在同步代码块或者是同步函数中使用 3.两个方法必须由锁对象调用 4.先唤醒再等待 线程中断: 1.一般都是通过设置变量来停止; 2.若要停止一个等待状态的线程,则需要notify()或者interrupt()配合
7.后台线程 实现格式: setDaemon(true); 注意:一旦主线程死亡,后台线程也跟只死亡
0 0
- JavaSE自学笔记整理(六)
- JavaSE自学笔记整理(一)
- JavaSE自学笔记整理(二)
- JavaSE自学笔记整理(三)
- JavaSE自学笔记整理(四)
- JavaSE自学笔记整理(五)
- JavaSE自学笔记整理(七)
- JavaSE自学笔记整理(八)
- 自学Swift-斯坦福笔记整理(六)
- JAVASE自学笔记IO File
- Redis自学笔记整理
- 自学PHP 笔记整理
- JAVA自学笔记(六) JAVAIO
- 资源视频学习JavaSE阶段整理笔记
- Python自学笔记六、socket编程
- Cmake 自学笔记(linux)(六)
- C#笔记整理(六)
- box2d物理引擎自学笔记整理1
- C++编译链接原理简介
- Laravel实现dingo+JWT api接口之配置篇
- 网点服务压力测试模拟仿真
- ctags
- hdu2150 Pipe 计算几何 判断相交
- JavaSE自学笔记整理(六)
- 深入理解Java的接口和抽象类
- ContentProvider详解5
- 快速排序
- pod install vs. pod update
- 大数据IMF传奇行动绝密课程第19课:Spark高级排序彻底解密
- LeetCode 92 Reverse Linked List II(翻转链表II)(Linked List)(*)
- spring RequestMapping 拦截多个请求
- zxing实现二维码生成和解析