Math类、Date、SimpleDateFormat,验证码,自定义线程

日期类  Date 

Calendar

日期格式化类  SimpleDateFormat

        作用1: 可以把日期转换成指定格式的字符串  format()

        作用2: 可以把一个字符串转换为对应的日期  parse()

注意:把一个字符串转换成对应日期,指定的字符串的格式必须要跟SimpleDateFormat的模式一致

代码演示:

import java.util.Calendar;

public class Demo13 {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.print("年:"+calendar.get(Calendar.YEAR));
System.out.print(" 月:"+(calendar.get(Calendar.MONDAY)+1));
System.out.print(" 日:"+calendar.get(Calendar.DATE));
System.out.print(" 时:"+calendar.get(Calendar.HOUR_OF_DAY));
System.out.print(" 分:"+calendar.get(Calendar.MINUTE));
System.out.print(" 秒:"+calendar.get(Calendar.SECOND));
}
}
运行结果:

 

 

需求:显示 当前系统时间: 2014年12月26日  xx时xx分xx秒   

代码演示:

Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String time = dateFormat.format(date);
System.out.println("当前系统时间:"+time);
String brithday = "2022年02月12日 11:27:54";
Date date1 = dateFormat.parse(brithday);
System.out.println(date1);
运行结果:

 

 Math 数学类,主要是提供了很多的数学公式。

abs(double a)  获取绝对值

ceil(double a)  向上取整

floor(double a)  向下取整

round(float a)  四舍五入

random()  产生一个随机数,大于等于0,但小于1.0的伪随机数double值

代码演示:

public class Demo14 {
public static void main(String[] args) {
System.out.println("绝对值:"+Math.abs(-3));
System.out.println("向上取整:"+Math.ceil(3.14));
System.out.println("向下取整:"+Math.floor(-3.14));
System.out.println("四舍五入:"+Math.round(3.54));
System.out.println("随机数:"+Math.random());
}
}
运行结果:

 随机数类

Random

需求:编写一个函数随机产生四位的验证码。

代码演示:

import java.util.Random;

public class Demo15 {
public static void main(String[] args) {
/* Random random = new Random();
int randomNum = random.nextInt(10)+1;
System.out.println("随机数:"+randomNum);*/
char[] arr = {'吴','春','婷','凤',};
StringBuffer ss = new StringBuffer();
Random random = new Random();
for (int i=0;i<3;i++){
int inde = random.nextInt(arr.length);
ss.append(arr[inde]);
}
System.out.println("验证码:"+ss);
}
}
运行结果:

 

 进程:正在执行的程序称作为一个进程。进程负责了内存空间的划分。

问题:Windows号称是多任务的操作系统,那么Windows是同时运行多个应用程序吗?

    从宏观的角度:Windows确实是同时运行多个应用程序。

    从微观角度:cpu是做了一个快速切换执行的动作,由于速度太快,所以我感觉不到在切换而已。

线程:线程在一个进程中负责了代码的执行,就是进程中一个执行路径,

多线程:在一个进程中有多个线程同时在执行不同的任务。

疑问:线程负责了代码的执行,我们之前没有学过线程,为什么代码可以执行呢?

    运行任何一个java程序,jvm在运行的时候都会创建一个main线程执行main方法中所有代码。

一个java应用程序至少有几个线程?

  至少有两个线程,一个是主线程负责main方法代码的执行,一个是垃圾回收期线程,负责了回收垃圾。

多线程的好处:

  1,解决了一个进程能同时执行多个任务的问题。

  2,提高了资源的利用率,

多线程的弊端:

  1,增加cpu的负担,

  2,降低了一个进程中线程的执行概率。

  3,引发了线程安全问题。

  4,出现了死锁现象

如何创建多线程:

    创建多线程的方式:

        方式一:

          1,自定义一个类继承Thread类

          2,重写Thread类的run方法,把自定义线程的任务代码写在run方法中

              疑问:重写run方法的目的是什么?

            每个线程都有自己的任务代码,jvm创建主线程的任务代码就是main方法中的所有代码,自定义线程的任务代码就是写在run方法中,自定义线程负责了run方法中的代码。

          3,创建Thread的子类对象,并且调用start方法开启线程、

注意:一个线程一旦开启,那么线程就会执行run方法只能的代码,run方法千万不要直接调用,直接调用run方法就是相当于调用了一个普通的方法而已并且没有开启新的线程。

代码演示:

public class Demo16 extends Thread{
@Override
public void run() {
for (int i = 0;i<1000;i++){
System.out.println("自定义线程:"+i);
}
}

public static void main(String[] args) {
Demo16 d = new Demo16();
d.start();
for (int i = 0;i<1000;i++){
System.out.println("main线程:"+i);
}
}
}
运行结果:

 

posted @ 2022-02-12 22:49  柯基$  阅读(46)  评论(0)    收藏  举报