不论方法有多少层的调用,都是在main线程下执行的,也就是说是单线程应用
不足:
程序的执行效率低
如何提高程序的执行效率呢?多线程模式的应用程序
在java中,有一个专属的类Thread,来表示线程的概念
类Thread 是程序中的执行线程
Java 虚拟机允许应用程序并发地运行多个执行线程
什么叫并发:
如何创建多线程的应用呢?
有两种形式:
A:继承Thread类,并重写run()方法,然后创建该子类的对象,之后在子类的对象上面调用start()方法
B:实现Runnable接口,并重写run()方法,然后创建一个Thread对象,并将刚刚创建的类型的对象(实例)作为参数传递,之后在Thread的对象上面调用start()方法
举例:
线程的名字的问题
setName(String):来设置线程的名字
getName():获取线程名字
优先级的问题:
setPriority(int):设置线程优先级
getPriority():获取线程优先级
默认线程的优先级为5,最大为10,最小为1;数字越大优先级越高
public static final int MAX_PRIORITY 10
public static final int MIN_PRIORITY 1
public static final int NORM_PRIORITY 5
睡觉的问题:
static void sleep(long millis) :在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响
步骤:
1:继承Thread类
2:重写run()方法
3:创建子类对象
4:通过子类对象的start()启动子线程
B:实现Runnable接口,并重写run()方法,然后创建一个Thread对象,并将刚刚创建的类型的对象(实例)作为参数传递,之后在Thread的对象上面调用start()方法
建议:多用第二种,因为 工作和线程是分开的,实现上面更灵活
步骤:
1:创建自定义类,实现Runnable接口
2:重写run()方法
3:创建一个Thread类的对象,并把自定义类型的实例(对象)作为Thread类的构造方法的参数传递
4:执行Thread类的对象的start()启动线程
新的 关键字 :synchronized 格式
synchronized(对象){
// ... 很多语句,可以理解为被synchronized包裹起来的代码块,是原子性的操作
}
// 我们可以认为 这里的对象,就像一把锁