我所理解的一心多用薄如纸屑

程序:是一组指令的集合 静态的

进程:正在运行的程序 动态的 有自己的独立空间

线程:进程的单一执行流 只能共享进程的空间

一个进程对应一个程序,一个程序对应多个进程;

一个线程对应一个进程,一个进程对应多个线程;

多线程的优点:同时并发执行多个任务,提高CPU的利用率

如何实现多线程:

继承Thread类:1:extends Thread

                         2:内部类 Thread thread=new Thread();

实现Runnable接口:implements Runnable;

线程的生命周期:

扫描二维码关注公众号,回复: 1926692 查看本文章


线程的状态:

新建 new  分配内存

就绪状态 获得CPU使用权

运行状态 执行run方法 占用CPU

阻塞状态 放弃CPU 重新就绪

死亡状态 run方法执行完之后死亡

sleep()、yield()、join()是Thread类的静态方法,都会使当前处于运行状态的线程放弃CPU,sleep()给其他运行线程的机会,但不考虑其他线程的优先级,但yield()只会让位给相同或更高优先级的线程,当线程执行sleep()方法后将转到阻塞状态,而执行yield()方法后将转到就绪状态,前者有可能抛出异常,后者没有。一般情况下,建议使用sleep()方法;join()方法用于等待其他结束,当前运行的线程可以调用另一线程的join()方法,当前运行线程将转到阻塞状态,直到另一线程结束他才会恢复好;

例:

public class Threads extends Thread{};

public class Threads implements Runnable{};

public class Thread{

    public static void mian(String[] args){

        Thread t1=new Thread(){

                public void run(){

                    //要做的事

}

};

}

}

后台线程:

后台线程是指为其他线程提供服务的线程,也称为守护线程或者精灵线程;

后台线程的特点:

与前台线程相伴相随,只有所有前台线程都结束生命周期,后台线程才会结束生命周期。

要将某个线程置为后台线程的话,必须在它启动之前调用setdaemon()方法。

默认情况下 由前台线程创建的线程仍是前台线程,由后台线程创建的线程仍是后台线程,例如:Java虚拟机的回收站

线程的同步、阻塞和异步(粗略):

同步:就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回,获取线程的对象锁,可以保证在同一时刻只有一个线程能够进入临界区,并在这个锁被释放之前,其它线程都不能进入临界区。

实现方法:同步方法  同步代码块

异步:通过状态通知来通知调用者或回调函数来处理这个调用;

阻塞:阻塞调用是指调用结果返回之前,当前线程会被挂起,函数只有在得到结果之后才会返回;

非阻塞:指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。

注:同步是一个过程,阻塞是线程的一种状态,线程同步不一定会发生阻塞

猜你喜欢

转载自blog.csdn.net/liudasnb/article/details/80839781
今日推荐