进程和线程的概述

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程和线程的概述相关的知识,希望对你有一定的参考价值。

1. 程序,线程,进程的概念:

程序:编写的静态代码
进程:程序的一次执行的过程。
线程:能在进程中独立完成的子任务。

2 Java实现多线程的两种方法:

继承Thread类
代码:

public class MyThread extends Thread{

    @Override
    public void run() {
        // TODO Auto-generated method stub
        super.run();
        System.out.println("继承Thread的线程:"+Thread.currentThread().getName());

    }
    public static void main(String[] args) {
        MyThread  thread=new MyThread();
        System.out.println("当前运行的线程:"+Thread.currentThread().getName());
        thread.start();
    }

}
################################
运行结果:
当前运行的线程:main
继承Thread的线程:Thread-0

注意:main线程不是主函数的main,而是系统的主线程.

Thread.currentThread:表示的是当前运行的线程。
Thread类其实是实现的Runnable接口的:我们看源码:

public class java.lang.Thread implements java.lang.Runnable {
。。。
}

实现Runnable接口
代码:

public class MyRun implements Runnable{

    public MyRun()
    {
        System.out.println("当前运行的线程:"+Thread.currentThread().getName());
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("实现Runnable接口:"+Thread.currentThread().getName());

    }

}
public static void main(String[] args) {
        MyRun run=new MyRun();
        Thread thread1=new Thread(run);
        Thread thread2=new Thread(run);
        thread1.start();
        thread2.start();
    }
###################################
结果:当前运行的线程:main
实现Runnable接口:Thread-0
实现Runnable接口:Thread-1

Thread类的构造函数:

构造方法摘要
Thread()???????????分配新的?Thread?对象。
Thread(Runnable?target)???????????分配新的?Thread?对象。
Thread(Runnable?target,?String?name)???????????分配新的?Thread?对象。
Thread(String?name)???????????分配新的?Thread?对象。
Thread(ThreadGroup?group,?Runnable?target)???????????分配新的?Thread?对象。
Thread(ThreadGroup?group,?Runnable?target,?String?name)???????????分配新的?Thread?对象,以便将?target?作为其运行对象,将指定的?name?作为其名称,并作为?group?所引用的线程组的一员。
Thread(ThreadGroup?group,?Runnable?target,?String?name, long?stackSize)???????????分配新的?Thread?对象,以便将?target?作为其运行对象,将指定的?name?作为其名称,作为?group?所引用的线程组的一员,并具有指定的堆栈大小。
Thread(ThreadGroup?group,?String?name)???????????分配新的?Thread?对象。

两种多线程的创建方式的对比

正如前面讲的Thread类其实是实现Runnable接口,所以对着两者比较我们可以引申为时extends和implements的比较。了解Java的继承和多态的知识就会知道后者好。
原因:第一,Java单一继承,接口可以多种实现。第二,利用接口有利于降低了程序之间的耦合度

线程之间的状态:

枚举常量摘要
BLOCKED???????????受阻塞并且正在等待监视器锁的某一线程的线程状态。
NEW???????????至今尚未启动的线程的状态。
RUNNABLE???????????可运行线程的线程状态。
TERMINATED???????????已终止线程的线程状态。
TIMED_WAITING???????????具有指定等待时间的某一等待线程的线程状态。
WAITING???????????某一等待线程的线程状态。

流程图:
技术分享图片

现在我们来讲讲为什么用多线程:

现在的cpu发展迅速,从单核的到多核,这时我们将面临一个问题:如何充分的利用cpu呢?这时多线程的出现解决了这个问题。简单点来说:线程可以有效地降低程序的开发和维护等成本,同时提升复杂应用程序的性能。
具体的来说:

  • 1.发挥多处理器的强大功能
  • 2.在单处理器系统上获得更高的吞吐量
  • 3 建模的简单性
  • 4 异步事件的简化处理

以上是关于进程和线程的概述的主要内容,如果未能解决你的问题,请参考以下文章

线程学习知识点总结

多线程编程

多个请求是多线程吗

0进程和线程的概述

0进程和线程的概述

python 线程和进程概述