1:多线程(理解)
(1)多线程:一个应用程序有多条执行路径。
线程:就是应用程序的执行路径。执行单元。
进程:正在执行的应用程序。
单线程:一个应用程序只有一条执行路径。
举例:
迅雷下载。
吃饭案例:
单进程单线程:一个人吃一桌菜
单进程多线程:多个人吃一桌菜
(2)Java中如何实现多线程(掌握 代码有空就写一遍)
A:继承Thread类
a:自定义类MyThread继承自Thread类
b:重写run()方法
c:创建MyThread类的对象
d:调用start()方法
B:实现Runnable接口
a:自定义类MyRunnable实现Runnable接口
b:重写run()方法
c:创建MyRunnable类的对象
d:创建Thread类的对象,把MyRunnable类的对象作为构造参数传递
e:调用start()方法
(3)面试题:
A:run()方法的作用?
里面封装的代码是需要被线程执行的。
B:run()和start()的区别?
run():封装了被线程执行的代码,但是直接调用却是普通方法的调用。
start():启动线程,并由jvm调用该线程的run()方法。
C:线程随机性的原理
CPU做着高效的切换,多个程序抢CPU的资源来执行。
D:线程的生命周期
新建,就绪,运行,阻塞,死亡
(4)卖票程序。
A:继承Thread类
B:实现Runnable接口
(5)线程安全问题:
买票的过程中,出现了
同一张票卖出了多次:CPU的每一次执行是一个原子性的操作。
出现了负数票:线程运行的随机性
(6)如何解决线程安全问题:
A:同步代码块
synchronized(对象) {
被同步的代码。
}
对象:任意对象。
被同步的代码:
导致线程安全问题代码。
如何分析呢,请参照线程安全问题的原因。
B:同步方法
把同步关键字加在方法上。
锁对象是this
注意:
静态方法的锁对象是当前类的class文件对象。
(7)如何分析代码是否有线程安全问题:
A:多线程程序
B:有共享数据
C:共享数据被多条语句操作
2:单例设计模式(理解)
(1)保证类在内存中只有一个对象。
(2)怎么保证的呢?
A:构造私有
B:本身提供一个对象。
C:提供静态公共方式访问
(3)两种方式:
A:饿汉式
class Student {
private Student() {}
private static Student s = new Student();
public static Student getStudent() {
return s;
}
}
B:懒汉式
class Student {
private Student() {}
private static Student s = null;
public synchronized static Student getStudent() {
if(s == null) {
s = new Student();
}
return s;
}
}
注意:
Runtime类的源码中也是单例模式。并且是饿汉式。
开发我们用饿汉式子。
面试懒汉式。
懒汉式:
A:延迟加载
(1)多线程:一个应用程序有多条执行路径。
线程:就是应用程序的执行路径。执行单元。
进程:正在执行的应用程序。
单线程:一个应用程序只有一条执行路径。
举例:
迅雷下载。
吃饭案例:
单进程单线程:一个人吃一桌菜
单进程多线程:多个人吃一桌菜
(2)Java中如何实现多线程(掌握 代码有空就写一遍)
A:继承Thread类
a:自定义类MyThread继承自Thread类
b:重写run()方法
c:创建MyThread类的对象
d:调用start()方法
B:实现Runnable接口
a:自定义类MyRunnable实现Runnable接口
b:重写run()方法
c:创建MyRunnable类的对象
d:创建Thread类的对象,把MyRunnable类的对象作为构造参数传递
e:调用start()方法
(3)面试题:
A:run()方法的作用?
里面封装的代码是需要被线程执行的。
B:run()和start()的区别?
run():封装了被线程执行的代码,但是直接调用却是普通方法的调用。
start():启动线程,并由jvm调用该线程的run()方法。
C:线程随机性的原理
CPU做着高效的切换,多个程序抢CPU的资源来执行。
D:线程的生命周期
新建,就绪,运行,阻塞,死亡
(4)卖票程序。
A:继承Thread类
B:实现Runnable接口
(5)线程安全问题:
买票的过程中,出现了
同一张票卖出了多次:CPU的每一次执行是一个原子性的操作。
出现了负数票:线程运行的随机性
(6)如何解决线程安全问题:
A:同步代码块
synchronized(对象) {
被同步的代码。
}
对象:任意对象。
被同步的代码:
导致线程安全问题代码。
如何分析呢,请参照线程安全问题的原因。
B:同步方法
把同步关键字加在方法上。
锁对象是this
注意:
静态方法的锁对象是当前类的class文件对象。
(7)如何分析代码是否有线程安全问题:
A:多线程程序
B:有共享数据
C:共享数据被多条语句操作
2:单例设计模式(理解)
(1)保证类在内存中只有一个对象。
(2)怎么保证的呢?
A:构造私有
B:本身提供一个对象。
C:提供静态公共方式访问
(3)两种方式:
A:饿汉式
class Student {
private Student() {}
private static Student s = new Student();
public static Student getStudent() {
return s;
}
}
B:懒汉式
class Student {
private Student() {}
private static Student s = null;
public synchronized static Student getStudent() {
if(s == null) {
s = new Student();
}
return s;
}
}
注意:
Runtime类的源码中也是单例模式。并且是饿汉式。
开发我们用饿汉式子。
面试懒汉式。
懒汉式:
A:延迟加载
B:线程安全问题
选择题竟然少写了一道题的答案。序列化和反序列化的简答题打错了。98分。
晚上坐公交,旁边一个小青年接了什么总的电话,这个卖萌撒娇,称兄道弟的,隔几秒还要甩下头发。什么时代这打工的和老总的关系这么亲切了?