多线程相关点

线程介绍线程和进程进程就是计算机中正在进行的一个独立的应用程序,进程是一个动态的概念必须是一个进行状态,如果一个应用没有启动,那么就不是进程;线程就是组成进程的基本单元,可以完成特定的功能,一个进程可以有多个线程组成。区别:内存空间上的区别:进程是独有的内存空间,每个进程之间是相互独立的,互不影响;线程是有共享的内存空间(也有私有空间)安全性:进程是相互独立的,一个进程的崩溃不会影响到其他的进程,进程是安全;线程存在内存空间共享,一个线程的崩溃可能影响到其他的线程的执行,线程的安全性不如进程
摘要由CSDN通过智能技术生成

线程介绍

线程和进程

进程就是计算机中正在进行的一个独立的应用程序,进程是一个动态的概念必须是一个进行状态,如果一个应用没有启动,那么就不是进程;
线程就是组成进程的基本单元,可以完成特定的功能,一个进程可以有多个线程组成。

区别:

  • 内存空间上的区别:进程是独有的内存空间,每个进程之间是相互独立的,互不影响;线程是有共享的内存空间(也有私有空间)
  • 安全性:进程是相互独立的,一个进程的崩溃不会影响到其他的进程,进程是安全;
  • 线程存在内存空间共享,一个线程的崩溃可能影响到其他的线程的执行,线程的安全性不如进程。
    关系: 进程是相互独立的,一个进程下可以有一个或者多个线程。
    Java中很少使用进程概念,但也可以使用:
 //java中创建进程的方式
        Runtime runtime = Runtime.getRuntime();

Java启动线程

private native void start0();

native方法会调用底层操作系统支持,Java本身是没办法启动线程的,线程启动是需要依赖底层操作系统支持的,Java调用native方法,调用底层操作系统C++编写的动态函数库,有C++去操作底层启动线程。Java是间接的调用来启动线程

线程创建方式

  • 继承thread类
  • 实现Runable接口
  • 实现Callable接口
实现Runable接口

Runable接口定义如下:

public interface Runable{
   
    //抽象的run方法
    public abstract void run();
}

Runable接口中提供了一个抽象的run方法,实现Runable接口实现run方法

Runnable实现方式:

/**
 * 通过实现Runable接口来实现run方法
 */
public class RunableDemo implements Runnable {
   
    @Override
    public void run(){
   
        System.out.println("线程名:" + Thread.currentThread().getName()+"线程在执行");
    }
}

 RunableDemo runableDemo = new RunableDemo();
        Thread thread = new Thread(runableDemo);
        //当前才会创建子线程
        thread.start();

Runnable实现类是任务,Thread类是线程对象,线程是用来执行任务的

实现Runnable的线程创建的步骤∶

  • 创建一个实现Runnable接口的实现类,并实现run方法
  • 实例化Runnable接口实现类
  • 创建Thread类实例,将实例化Runnable接口实现类作为参数传递
  • 启动子线程,调用Thread类和实例的start
继承Thread类

Thread类的定义

public class Thread implements Runnable

可以看出:Thread类实现了Runnable接口,即Thread类也是Runnable接口实现类,在Thread中也有run方法的实现

 public void run() {
   
        if (target != null) {
   
            target.run();
        }
    }

Thread类中的run方法的实现中,target任务体不能为空,即调用run方法,需要通过Thread类来重写run方法

继承Thread类来使用Demo

/**
 * 通过继承Thread类来重写run方法
 */
public class ThreadDemo extends  Thread {
   
    @Override
    public void run(){
   
        System.out.println("ThreadDemo类 线程名:"+Thread.currentThread().getName()+"在执行");

    }

        //第二种:通过继承Thread类来创建线程
        ThreadDemo threadDemo = new ThreadDemo();
        threadDemo.start();

继承Thread类创建线程步骤:

  • 创建类,继承Thread重写run方法
  • 实例化当前创建的Thread类的子类
  • 启动子线程、调用start方法
实现Callable接口

Callable接口声明如下:

public interface Callable<V> {
   
    V call() throws Exception;
}

Callable接口提供了call方法,具有返回值,通过泛型来定义,该接口可以抛出异常

该接口的实现类是无法直接使用,需要借助于FutureTask类

public class FutureTask<V> implements RunnableFuture<V> {
   
       public FutureTask(Callable<V> callable) {
   
        if (callable == null)
            throw new NullPointerException();
        this.callable = callable;
        this.state = NEW;       // ensure visibility of callable
    }
}

RunnableFuture接口声明
public interface RunnableFuture<V> extends Runnable, Future
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值