多线程
一.多线程
-
好处:提高任务的执行效率 (线程本身也会耗费系统资源 创建线程要把握度)
-
进程:一个正在运行的程序 一个进程可以有一个或多个线程
分时调度: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