*什么是线程? * 线程是一个程序内部的一条执行路径 * 我们之前启动程序执行后,main方法的执行其实是一条单独的执行路径 * 程序中如果只要一条执行路径,那么这个程序就是单线程程序 * 多线程是什么? * 多线程是指从软硬件上实现多条执行流程的技术 * * 学习多线程的目标: * 如何创建!(如何实现多线程,实现方式的各自优缺点) * Thread的常用方法 * 线程的安全和线程同步(多个线程同时访问一个共享数据的问题及解决) * 线程通讯,线程池 * 定时器,线程状态 ******************************************* * Thread类 * JAVA是通过java.lang.Thread类来代表线程的 * 按照面向对象的思想,Thread类应该提供了实现多线程的方式 ******************************************************* * 多线程的实现方式一:继承Thread类 * 1.定义一个子类(MyThread)继承线程类(java.lang.Thread),重写run()方法 * 2.创建MyThread类的对象 * 3.调用线程对象的start()方法启动线程(启动后还是执行run()方法) * *优缺点: * 优点:编码简单 * 缺点:线程类已经继承Thread,无法继承其他类,不利于扩展 * * //1.为什么不直接调用run?而是先调用start? * 直接调用run会当初普通直接方法,此时还是相当于单线程(先跑run在跑下面,start通知开始多线程) * 只要调用start方法才是启动一个新的线程执行 * //2.为什么不要把主线程任务放在子线程之前? * 这样主线程一直是先跑完,相当于是一个单线程效果(把主线程放在start【开始多线程】下面) * */
public class ThreadDemo1 { public static void main(String[] args) { //3.new一个线程对象 Thread t = new MyThread(); //4.调用start方法启动线程(执行还是run方法) t.start();//实现多线程(main,t) for (int i = 0; i <5; i++) { System.out.println("主线程执行输出:"+i); } } } /* * 1.继承一个线程类继承Thread类 * */ class MyThread extends Thread{ //2.重写run方法 @Override public void run() { for (int i = 0; i <5 ; i++) { System.out.println("子线程执行输出:"+i); } } }