1:多线程(理解)
(1)如果一个应用程序有多条执行路径,则被称为多线程程序。
进程:正在执行的程序。
线程:程序的执行路径,执行单元。
单线程:如果一个应用程序只有一条执行路径,则被称为单线程程序。
多线程:如果一个应用程序有多条执行路径,则被称为多线程程序。
举例:迅雷下载,360的管理界面。
多线程:多个人吃统一盘菜
(2)多线程程序实现的两种方案:(掌握 步骤我们一起写,代码你写)
A:继承Thread类
a:自定义类MyThread继承Thread类。
b:重写run方法(),在这里面输出1-100的数据。
c:定义测试类MyThreadTest,在测试类中创建MyThread类的多个对象。
d:调用start()
代码体现:
public class MyThread extends Thread {
public MyThread(){}
public MyThread(String name) {
super(name);
}
public void run() {
for(int x=1; x<=100; x++) {
System.out.println(getName()+"---"+x);
}
}
}
public class MyThreadTest {
public static void main(String[] args) {
MyThread my1 = new MyThread("三国志");
MyThread my2 = new MyThread("三国杀");
//my1.setName("三国志");
//my2.setName("三国杀");
my1.start();
my2.start();
}
}
B:实现Runnable接口
a:自定义类MyRunnable实现Runnable接口。
b:重写run方法(),在这里面输出1-100的数据。
c:定义测试类MyThreadTest,在测试类中创建MyRunnable类的一个对象。
d:在测试类创建Thread类的多个对象,并把MyRunnable类的一个对象作为构造参数传递。
e:调用start()
代码体现:
public class MyRunnable implements Runnable {
public void run() {
for(int x=1; x<=100; x++) {
System.out.println(Thread.currentThread().getName()+"---"+x);
}
}
}
public class MyRunnableTest {
public static void main(String[] args) {
MyRunnable my = new MyRunnable();
Thread t1 = new Thread(my,"斗地主");
Thread t2 = new Thread(my,"三国群英传2");
t1.start();
t2.start();
}
}
(3)面试题:
A:如何启动一个线程
B:start()和run()方法的区别
C:线程随机性原理
D:线程的生命周期
E:线程的安全问题是怎么产生的,以及是如何解决的?
F:同步解决线程安全问题的方式有几种?
G:同步代码块的锁对象是谁?同步方法的锁对象是谁?
F:静态方法的锁对象是谁?
(4)几个方法
优先级(priority)
暂停(yield)
加入(join)
守护线程
线程睡眠(sleep)
线程中断(interrupt)
(5)案例:
卖票案例。
线程安全问题:
怎么产生的:
A:多线程环境
B:有共享数据
C:多条语句操作共享数据
怎么解决:
把C步骤给锁起来。
两种方案:
a:同步代码块
synchronized(锁对象) {
一个原子性操作
}
b:同步方法
把synchronized添加到方法声明上。返回值前。
|
|