JAVA并发编程学习(一)———线程和进程

什么是进程?

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。1

什么是线程?

线程是任务执行和调度的基本单位。

进程和线程的区别

根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位。计算机在执行程序时,会为程序创建相应的进程,进行资源分配时,是以进程为单位进行相应的分配。每个进程都有相应的线程,在执行程序时,实际上是执行相应的一系列线程。

地址空间:进程有自己独立的地址空间,每启动一个进程,系统都会为其分配地址空间,建立数据表来维护代码段、堆栈段和数据段;线程没有独立的地址空间,同一进程的线程共享本进程的地址空间。

资源拥有:进程之间的资源是独立的;同一进程内的线程共享本进程的资源。

执行过程:每个独立的进程程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

线程是处理机调度的基本单位,但是进程不是。由于程序执行的过程其实是执行具体的线程,那么处理机处理的也是程序相应的线程,所以处理机调度的基本单位是线程。

系统开销:进程执行开销大,线程执行开销小。

JAVA如何创建线程

方式一:通过继承Thread类来创建线程


public class ThreadDemo extends Thread{

    public static void main(String[] args) {
        ThreadDemo threadDemo = new ThreadDemo();
        threadDemo.start();
    }

    @Override
    public void run() {
        System.out.println("hello world");
    }
}

方式二:通过实习Runnable接口(推荐使用该方式来创建线程,便于拓展)


public class ThreadDemo extends Thread{

    public static void main(String[] args) {
        ThreadDemo01 threadDemo01 = new ThreadDemo01();
        Thread thread = new Thread(threadDemo01);
        thread.start();
    }

    @Override
    public void run() {
        System.out.println("hello world");
    }
}
class ThreadDemo01 implements Runnable{

    @Override
    public void run() {
        System.out.println("hello world");
    }
}

方式三:通过Callable接口来创建线程

public class ThreadDemo extends Thread{

    public static void main(String[] args) throws Exception{
        ThreadDemo02 threadDemo02 = new ThreadDemo02();
        FutureTask<Integer> futureTask = new FutureTask<Integer>(threadDemo02);
        Thread thread = new Thread(futureTask, "1");
        Thread thread1 = new Thread(futureTask, "s");
        thread1.start();
        thread.start();

        System.out.println(futureTask.get());
    }

    @Override
    public void run() {
        System.out.println("hello world");
    }
}

方式4:通过线程池来创建线程

public class ThreadDemo extends Thread{

    public static void main(String[] args) throws Exception{
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        executorService.execute(new ThreadDemo());
        executorService.shutdown();
    }

    @Override
    public void run() {
        System.out.println("hello world");
    }
}

以上就是Java创建线程的几种方式,用继承Thread和实现Runnable接口创建的线程,都是重写run()方法,是不能返回的,而且因为Java是单继承、多实现,所以比较推荐使用接口实现的方式来创建线程;实现Callable的接口来创建接口,重写call()方法,这个是有返回值的。
线程的创建和销毁的开销成本是比较大的,所以一般在生产环境中,会使用线程池的方式来创建线程,通过线程池来管理线程,减少创建和销毁的开销。
所以下一章会开始线程池的学习。


  1. 来自百度百科 ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值