多线程和匿名内部类的理解

                                          多线程

一.多线程

  • 好处:提高任务的执行效率 (线程本身也会耗费系统资源 创建线程要把握度)

  • 进程:一个正在运行的程序 一个进程可以有一个或多个线程
    分时调度:cpu同一时间只能执行一个任务(cpu单核单线程)

  • 要同时执行多个任务 这时cpu就会为 多个任务开辟多个独立的执行路径(执行路径 运行功能的代码)

  • cpu会在多个任务之间进行快速切换

  • 抢占资源:抢夺cpu的执行资源 改变任务的优先级

  • public class Demo01 {
    public static void main(String[] args) {
    //创建子线程
    SubThread st=new SubThread();
    //开启线程
    st.start();
    SubThread st1=new SubThread();
    st1.start();
    // st.run();
    for (int i = 0; i < 100; i++) {
    System.out.println(“main----”+i);
    }
    System.out.println(“main”);
    }
    }
    //创建线程类的子类
    class SubThread extends Thread{
    //重写run方法
    public void run() {
    for (int i = 0; i < 100; i++) {
    System.out.println(“run–”+i);
    }
    }
    }
    二.线程的命名

  • 主线程:main

  • 子线程:默认 Thread-x(x从0开始)

  • public class Demo02 {
    public static void main(String[] args) {
    NameThread nt1=new NameThread(“吼吼吼吼”);
    nt1.start();
    NameThread nt2=new NameThread(“酸辣笋尖粉”);
    nt2.start();
    //打印主线程的名字
    Thread currentThread = Thread.currentThread();
    System.out.println(currentThread.getName());
    }
    }
    class NameThread extends Thread{
    //构造方法
    public NameThread() {
    // TODO Auto-generated constructor stub
    }
    public NameThread(String string) {
    super(string);
    }
    public void run() {
    for (int i = 0; i < 50; i++) {
    //获取线程的名字
    //System.out.println(this.getName()+"***"+i);
    }

    }
    }
    三.线程两种创建方式(实现和继承)
    继承方式

  • 1.增加类和类的耦合度 2.java中类只能单继承

  • 实现方式

  • 2.接口可以多实现(灵活) 2.将线程要执行的方法 从类中分离出来

  • public class Demo03 {
    public static void main(String[] args) {
    TestThread t =new TestThread();
    t.start();
    funmain();
    System.out.println(“最后”);
    }
    public static void funmain() {
    for (int i = 0; i < 80; i++) { System.out.println(Thread.currentThread().getName()+“+fun"+i);
    }
    }
    }
    class TestThread extends Thread{
    public void run() {
    for (int i = 0; i < 50; i++) {
    //获取当前线程名字 System.out.println(Thread.currentThread().getName()+"
    ”+i);
    }
    fun();
    }
    public void fun() { System.out.println(Thread.currentThread().getName()+"****+fun");
    }
    }

public class Demo04 {
public static void main(String[] args) {
//创建接口的实现类对象
Runnablep1 rp=new Runnablep1();
//创建线程类对象
Thread t=new Thread(rp);
//开启线程
t.start();
}
}
class Runnablep1 implements Runnable{
public void run() {
System.out.println(Thread.currentThread().getName());

}

}
四.匿名内部类创建子类或实现类对象
public class Demo05 {
public static void main(String[] args) {
//相当于创建了 test类的 子类对象 且没有类名
Test t=new Test() {
public void fun() {
System.out.println(“重写Test方法”);
}
};
t.fun();

//创建接口实现类
Inter  x=new Inter() {		
	public void fun() {
	System.out.println("实现类fun方法");
	}
};
x.fun();

new Inter() {
	public void fun() {
	System.out.println("hohouhdfjkfi");
	}
}.fun();

}
}
class Test{
public void fun() {
System.out.println(“test方法”);
}
}

interface Inter{
public abstract void fun();
}
五.线程的6种状态(新建状态 运行状态 受阻塞状态 等待状态 休眠状态 死亡状态)
没有得到执行资源的线程 会进入 受阻塞状态
当受阻塞状态的线程 得到执行资源 会进入运行状态
*
运行状态–>休眠状态 相当于 放弃了cpu的执行权
等休眠时间结束 重新获得cpu 的执行权
*
运行状态–>等待状态 相当于 放弃了cpu的执行权
等到调用了notify()方法 重新获得cpu的执行权
![在这里插入图片描述](%E5%85%AD%E7%A7在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/chenyuanshengboke/article/details/82764323