JAVA EE初阶 2: 多线程-初阶
1.认识线程Thread1.1概念1.2创建线程1方法1 - 继承Thread类【 Ctrl C 取消 终止 】2方法2 - 实现Runnable接口3总结4匿名内部类5lambda表达式最常用2.Thread类及常见方法2.1构造方法2.2常见属性2.3启动一个线程 start()调用start方法才真的在操作系统的底层创建出一个线程。2.4中断一个线程package thread; public class Demo7 { private static boolean flag true; public static void main(String[] args) throws InterruptedException { Thread t new Thread(() - { while(flag){ System.out.println(hello thread); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); t.start(); System.out.println(hello main); Thread.sleep(3000); flag false; System.out.println(让 t 线程终止); } }package thread; public class Demo7 { public static void main(String[] args) throws InterruptedException { Thread t new Thread(() - { while(Thread.currentThread().isInterrupted()){ System.out.println(hello thread); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); t.start(); System.out.println(hello main); Thread.sleep(3000); t.interrupt(); System.out.println(t 线程的中断标志位 t.isInterrupted()); } }2.5等待一个线程 join()有时我们需要等待一个线程完成它的工作后才能进的下⼀步工作这时我们需要⼀个方法明确等待线程的结束。主线程等待代码package thread; public class Demo7 { public static void main(String[] args) throws InterruptedException { Thread t new Thread(() - { for(int i 0; i 5; i){ System.out.println(hello thread); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block //e.printStackTrace(); break; } } }); System.out.println(主线程开始); t.start(); System.out.println(主线程等待之前); t.join(); System.out.println(主线程等待之后); System.out.println(主线程结束); } }t线程等待代码package thread; public class Demo7 { public static void main(String[] args) throws InterruptedException { Thread mainThread Thread.currentThread(); Thread t new Thread(() - { try { System.out.println(t 线程等待之前); mainThread.join(); System.out.println(t 线程等待之后); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }); t.start(); for(int i 0; i 3; i){ System.out.println(hello main); Thread.sleep(1000); } } }2.6获取当前线程引用2.7休眠当前线程3.线程的状态线程的状态是⼀个枚举类型 Thread.State4.多线程带来的的风险-线程安全(重点)4.1概念 例子4.2线程不安全的原因5.死锁重点Object lock1 new Object(); Object lock2 new Object(); Thread t1 new Thread() { Override public void run() { synchronized (lock1) { synchronized (lock2) { // do something... } } } }; t1.start(); Thread t2 new Thread() { Override public void run() { synchronized (lock2) { synchronized (lock1) { // do something... } } } }; t2.start();不会产生环路等待的代码:约定好先获取lock1,再获取lock2,就不会环路等待。Object lock1 new Object(); Object lock2 new Object(); Thread t1 new Thread() { Override public void run() { synchronized (lock1) { synchronized (lock2) { // do something... } } } }; t1.start(); Thread t2 new Thread() { Override public void run() { synchronized (lock1) { synchronized (lock2) { // do something... } } } }; t2.start();6.synchronized关键字 - 监视器锁monitor lock6.1synchronized的特性6.2synchronized使用示例重点是第一种也是最常用的。6.3Java标准库中的线程安全类7.wait和notify7.1wait()方法7.2notify() notifyAll() 方法7.3wait和sleep的对比面试题8.多线程案例8.1单例模式面试常考单例模式是校招中最常考的设计模式之一8.2阻塞队列8.3线程池1概念线程池最大的好处就是减少每次启动、销毁线程的损耗。2模拟实现8.4定时器自行实现一个定时器虽然执行结果看起来对了但其实还是有几个问题的。9.总结
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2419964.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!