多线程
线程创建的几种方式
1、继承Thread
//继承Thread实例 public class aThread extends Thread{ //继承Thread后一定要重写run方法 public void run(){ for (int i = 0; i < 100; i++) { //获取当前线程名字 System.out.println(Thread.currentThread().getName()+":"+i); } } public static void main(String[] args) { //创建线程对象 aThread a1 = new aThread(); aThread a2 = new aThread(); //启动线程 a1.start();//启动线程一定是调用srart方法不是run方法 a2.start();//因为调用run方法就不是线程方式执行了 } 执行结果: Thread-0:0 Thread-0:1 Thread-1:0 Thread-1:1 Thread-0:2 Thread-0:3 。。。。
2、实现Runnable接口:可实现数据共享和多继承接口这是Thread所没有的:例如抢票案例
//实现Runnable接口实例 public class aThread2 implements Runnable{ public void run() { for (int i = 0; i < 100; i++) { //获取当前线程名字 System.out.println(Thread.currentThread().getName()+":"+i); } } public static void main(String[] args) { //创建线程对象 Runnable runnable = new aThread2(); //后面可以自定义名称 Thread a1 = new Thread(runnable,"韫钰1号"); Thread a2 = new Thread(runnable,"默默2号"); //启动线程 a1.start();//启动线程一定是调用srart方法不是run方法 a2.start();//因为调用run方法就不是线程方式执行了 } 执行结果: 默默2号:0 默默2号:1 韫钰1号:0 默默2号:2 默默2号:3 韫钰1号:1 。。。。
3、lambda表达式(jdk1.8)或者线程池(底层也是上面两种方式实现)
线程也有就绪、阻塞和运行三种基本状态。 (五种就加上 创建状态 和 死亡状态)
就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;
运行状态是指线程占有处理机正在运行;
阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。
线程方法:
synchronized:线程加锁
未完待续。。
个人笔记--也摘抄了来自个网站的资源和自己总结
感谢默默的陪伴