JAVA——多线程

1.什么是多线程?(“应用软件中互相独立,可同时运行的功能”)

线程:线程是操作系统能够进行运算调度的最小单位。他被包含在进程之中,是进程中的实际运作单位。

进程:是程序的基本执行实体

多线程的作用:提高运行效率,支持多个相互独立的功能同时运行;

多线程的应用场景(欲想多个事情同时运行):聊天软件,服务器,软件中的耗时操作等;

2.并发&&并行

并法:在同一时刻有多个指令在单个CPU上级交替执行;

并行:在同一时刻,有多个指令在单个CPU上同时执行;

3.多线程的实现方式

①继承Thread类的方式进行实现;

②实现Runnable接口的方式进行实现;

③利用Callable接口和Future接口方式实现;(可以获取到多线程的运行结果)

实现代码:

public class Listof {
    public static void main(String[] args) {
        //继承Thread类的实现方式
        MyThread myThread1=new MyThread();
        MyThread myThread2=new MyThread();
        myThread1.setName("线程1:");
        myThread2.setName("线程2:");
        myThread1.start();
        myThread2.start();
        

        //实现Runnable接口方式
        Myrun myrun1=new Myrun();
        Thread s1=new Thread(myrun1);
        Thread s2=new Thread(myrun1);
        s1.setName("线程1:");
        s2.setName("线程2:");
        s1.start();
        s2.start();

         //实现Callable接口
        MyCallable myCallable=new MyCallable();
        FutureTask fu=new FutureTask<>(myCallable);
        Thread thread=new Thread(fu);
        thread.start();
        Integer integer = fu.get();
        System.out.println(integer);

    }
}

//MyThread类
public class MyThread extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 50; i++) {
            System.out.println(getName()+"Java 世界上最好的语言!");
        }
    }
}

//Myrun类
public class Myrun implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 50; i++) {
            Thread t=Thread.currentThread();
            System.out.println(t.getName()+"Java 世界上最好的语言!");
        }
    }
}

//MyCallable类
import java.util.concurrent.Callable;

public class MyCallable implements Callable {


    @Override
    public Integer call() throws Exception {
        int sum=0;
        for (int i = 1; i <= 100; i++) {
            sum+=i;
        }
        return sum;
    }
}

4.常用成员方法

String getName() 获取线程的名称
void setName(String name) 设置线程的名字
static Thread currentThread() 获取当前线程对象

static void sleep(long time)

让线程休眠(毫秒)
setPriority(int newPriority) 设置线程优先级(默认是5)
final int getPriority() 获取线程优先级
fianl void setDaemon(boolean on) 设置为守护线程
public static void yield() 礼让线程
public static void join() 插入线程

5.线程的生命周期

①新建:创建了线程对象及进入了新建状态;

②就绪:当线程对象调用了start()方法之后及进入了就绪状态(此时的线程只有执行资格,但无执行权,只有抢到了CPU的执行权之后才可进入运行状态);

③运行:当处于就绪状态的线程抢到了CPU的执行权之后及进入了运行状态(此时的线程既有执行资格又有执行权);

④死亡:当处于运行状态的线程执行完run()方法之后,此时线程死亡、变成垃圾;

⑤阻塞:处于运行状态的线程可能会因调用了sleep()方法,或者其他某种阻塞式方法而进入了等待状态(此时的线程没有执行资格,也没有执行权),在sleep()或其他阻塞方式结束后再一次进入就绪状态进一步进入后续状态;

你可能感兴趣的:(java,开发语言)