工作内容:
1.回顾单例模式和简单工厂模型
2.学习Java多线程机制
学习分享:
线程:进程的一条执行路径
一、线程的生命周期:新建→(start)就绪→(获取资源执行run语句)运行状态→堵塞状态(sleep)→(run语句执行完)终止
二、线程实现方式:
1.继承Thread.
2.实现Runnable接口【可以实现多线程的资源共享】
三、Thread.sleep(毫秒数)与Thread. Interrupt()的使用:
1.sleep方法需在线程start之后执行,该方法是使当前线程进入阻塞状态,持续时间是‘毫秒数’。
2.在使用sleep方法后,使用interrup方法可以使sleep执行catch部分语句(可以在catch语句中使用return语句来终止该线程)
3.Thread.yield()方法会使当前线程进入就绪状态,重新等待资源
4.object.wait()方法(属于Object)可以使object处于等待状态,这个object将一直不能变动【变动也是无效的变动】,直到object.notify/notifyAll来唤醒这个object之后才可队这个object做操作
5.线程优先级的设置:
a) 实现Runnable接口——在线程start()之前设置
b) 继承自Thread,可以在构造方法中使用this.setPriority(int权值)来设置
//测试实现Runnable的使用【实现资源共享】
public class RunnableDemo implements Runnable {
private int tickets = 50;
@Override
public void run() {
while (tickets > 0) {
System.out.println(Thread.currentThread().getName() + "正在卖票,还剩" + (tickets--) + "张票");
}
}
}
//测试用例
public class Test {
public static void main(String[] args) {
RunnableDemo sale = new RunnableDemo();
Thread window1 = new Thread(sale, "一号");
Thread window2 = new Thread(sale, "二号");
Thread window3 = new Thread(sale, "三号");
window1.start();
window2.start();
window3.start();
}
}
执行结果:共享票数
//测试sleep和interrup的使用
public class RunnableDemo implements Runnable {
private int tickets = 50;
@Override
public void run() {
while (tickets > 0) {
System.out.println(Thread.currentThread().getName() + "正在卖票,还剩" + (tickets--) + "张票");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println("抛出异常");
return;// 如果这里没有使用return,则程序继续执行
}
}
}
}
public class Test {
public static void main(String[] args) {
// MultiThreadingTest myMultiThreadingTest = new MultiThreadingTest();
// myMultiThreadingTest.start();
// for (int i = 0; i < 1000; i++) {
// System.out.println(Thread.currentThread().getName());
// }
RunnableDemo sale = new RunnableDemo();
Thread window1 = new Thread(sale, "一号");
// Thread window2 = new Thread(sale,"二号");
// Thread window3 = new Thread(sale,"三号");
window1.start();
// window2.start();
// window3.start();
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
System.out.println("主线程暂停异常");
}
window1.interrupt();
System.out.println("执行结束");
}
}