多线程(多线程的引入)
线程 :
* 线程是程序执行的一条路径,一个进程中可以包含多条线程。
* 多线程并发执行可以提高程序的效率,可以同时完成多项工作。
应用场景:
* 服务器同时处理多个客户端请求。
多线程(多线程并行和并发的区别)
* 并行就是两个任务同时运行,就是甲任务进行的同时,乙任务也在运行。( 需要多个cpu)
* 并发是指两个任务都请求运行,而处理器只能接收一个任务,就把这两个任务安排轮流进行,由于时间间隔较短,使人感觉两个任务都在运行。
多线程(多线程程序实现的方式 )
* extends Thread:
public class Dome1_Thread { public static void main(String[] args) { // MyThread my=new MyThread(); //4.创建MyThread子类对象 my.start(); //5.statr()开启线程 for (int i = 0; i <10; i++) { System.out.println("b"); } } } class MyThread extends Thread{ //1.继承Thread public void run() { //2.重写run() for (int i = 0; i < 10; i++) { //3.将要执行的代码放在run()中 System.out.println("aaa"); } for (int i = 0; i < 10; i++) { //将要执行的代码放在run()中 System.out.println("ccc"); } } }
* implements Runnable:
public class Dome1_Thread { public static void main(String[] args) { // MyRunnable mr = new MyRunnable(); //4.创建Runnable的子类对象 Thread t = new Thread(mr); //5.将其当作参数传递给Thread的构造函数 t.start(); //6.开启线程 for (int i = 0; i < 10; i++) { System.out.println("b"); } } } class MyRunnable implements Runnable{ //1.定义一个类实现Runnable @Override public void run() { //2.重写run() for (int i = 0; i < 10; i++) { //3.将要执行的代码放在run()中 System.out.println("aaa"); } } }
两种方式的区别:
* 继承Thread
* 好处是:可以直接使用Thread类中的方法,代码简单。
* 弊端是:如果已经有了父类,就不能用这种方法。
* 实现Runnable接口:
* 好处是:即使自己定义的线程类有了父类也没关系,因为父类也可以实现接口,而且接口是可以多实现的。
* 弊端是:不能直接使用Thread中的方法需要先获取线程对象后才能得到Thread的方法。
多线程(匿名内部类实现线程)
public static void main(String[] args) { //方法1: new Thread() { // 1.继承Thread() public void run() { // 2.重写run() for (int i = 0; i <= 10; i++) { // 3.将要执行的代码放在run()中 System.out.println("aaa"); } } }.start(); // 4.statr()开启线程 //方法2: new Thread( new Runnable() { //1.将Runnable的子类对象传递给Thread的构造方法 public void run() { // 2.重写run() for (int i = 0; i <= 10; i++) { // 3.将要执行的代码放在run()中 System.out.println("bbb"); } } }).start(); // 4.statr()开启线程 }
多线程(获取当前线程的对象)
* Thread.currentThread() :获取当前正在执行的线程。
public static void main(String[] args) { new Thread() { public void run() { System.out.println(this.getName() + "...aaa"); } }.start(); new Thread( new Runnable() { public void run() { //Thread.currentThread()获取当前正在执行的线程 System.out.println(Thread.currentThread().getName() +"...bbb"); } }).start(); // 设置主线程名字 Thread.currentThread().setName("陈琳狗"); //获取主线程名字 System.out.println(Thread.currentThread().getName()); }
多线程(休眠线程)
* Thread.sleep(毫秒 ,纳秒):控制当前线程休眠若干毫秒
(1秒=1000 毫秒 1秒=1000*1000*1000 纳秒)
多线程(守护线程)
* setDaemon( ) :设置一个线程为守护线程,该线程不会单独执行,当其他非守护线程都执行结束后,自动推出。( 当传入为true就是意味着设置为守护线程。)