美文网首页
Java多线程(一)

Java多线程(一)

作者: 啊啰哈嘿呀 | 来源:发表于2021-01-24 10:18 被阅读0次

Java多线程(一)

1.进程和线程

进程是操作系统结构的基础,是一次程序的执行;是一个程序及其数据在处理机上顺序执行所发生的活动;是程序在一个数据集合上运行的过程,它是操作系统进行资源分配和调度的一个独立单位。

线程是在进程中独立运行的子系统

2.线程的创建方式

2.1 继承Thread类

/**
 * 线程的创建方式一:继承Thread类
 */
public class MyThread extends Thread {
    @Override
    public void run() {
        super.run();
        System.out.println("MyThread....");
    }
}
public class RunThread{
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start();
        System.out.println("运行结束! ");
    }
}

如果欲创建的线程类已经有一个父类了,这时就不能再继承自Thread类了,因为Java不支持多继承,所以就需要实现Runnable接口来应对这种情况。

2.2 实现Runnable接口

public class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("My Runnable ...");
    }
}
public class RunRunable {
    public static void main(String[] args) {
        MyRunnable myRunnable = new MyRunnable();
        Thread thread = new Thread(myRunnable);
        thread.start();
        System.out.println("运行结束! ");
    }
}

很多业务场景下我们需要获取线程执行后的结果,上述两种方法就不适用了,可以实现Callable接口通过FutureTask获取返回值。

2.3 实现Callable接口

public class MyCallable implements Callable<String> {
    @Override
    public String call() throws Exception {
        System.out.println("My Callable...");
        return "result";
    }
}
public class RunCallable {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        FutureTask<String> futureTask = new FutureTask<>(new MyCallable());
        Thread thread = new Thread(futureTask);
        thread.start();
        System.out.println("futureTask返回值"+futureTask.get());
        System.out.println("运行结束! ");

    }
}

2.4 区别

1).继承Thread的类无法继承其他类,实现Runnable或Callable接口可以继承其他类;
2).Callable接口里定义的方法有返回值,可以声明抛出异常;

3.Thread的基础API

3.1 start()方法
start()方法的作用及时通知“线程规划器”此线程已经准备就绪,等待调用线程对象的run()方法。这个过程其实就是让系统安排一个时间来调用Thread中的run()方法。
3.2 currentThread()方法
currentThread()方法可返回代码段正在被那个线程调用的信息。
3.3 isAlive()方法
方法isAlive的功能是判断当前的线程是否处于活动状态

活动状态就是线程已经启动尚未终止。线程处于正在运行或准备开始运行的状态,就认为线程是“存活”的。

public class MyThread extends Thread {
   @Override
   public void run() {
       super.run();
       System.out.println("MyThread isAlive:"+this.isAlive());
   }
}
public class RunThread{
   public static void main(String[] args) {
       MyThread myThread = new MyThread();
       System.out.println("begin:"+myThread.isAlive());
       myThread.start();
       System.out.println("end:"+myThread.isAlive());
   }
}

运行结果:

begin:false
end:true
MyThread isAlive:true

3.4 sleep()方法
方法sleep()的作用是在指定的毫秒数内让当前“正在执行的线程”休眠(暂停执行)。
3.5 getId()方法
getId()方法的作用是取得线程的唯一标识。

public class MyThread extends Thread {
    @Override
    public void run() {
        super.run();
        System.out.println("MyThread :"+this.getName()+" id:"+this.getId());
    }
}

运行结果:

MyThread :Thread-0 id:11

相关文章

  • 带你搞懂Java多线程(五)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三)带你搞懂Java多线程(四) ...

  • 带你搞懂Java多线程(六)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三)带你搞懂Java多线程(四)带...

  • Java多线程目录

    Java多线程目录 Java多线程1 线程基础Java多线程2 多个线程之间共享数据Java多线程3 原子性操作类...

  • java多线程--Callable

    **移步[java多线程系列文章]Java多线程(二十二)---LockSupport工具Java 停止线程 一、...

  • android 多线程 — 线程的面试题和答案

    这里都是我从各个地方找来的资料,鸣谢: Java多线程干货系列—(一)Java多线程基础 JAVA多线程和并发基础...

  • 带你搞懂Java多线程(四)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三) 什么是线程间的协作 线程之间...

  • Java多线程高级特性(JDK8)

    [TOC] 一、Java多线程 1.Java多线程基础知识 Java 给多线程编程提供了内置的支持。一条线程指的是...

  • Java多线程编程核心技术【笔记】

    Java多线程编程核心技术【笔记】 第一章 Java多线程技能 使用多线程的场景? 阻塞 多线程提高运行效率 依赖...

  • 多线程--基础

    Java多线程 从本篇开始,笔者开始了一个新的专题,来说说Java多线程。 在讲解Java多线程之前,我们来了解下...

  • Java多线程

    Java多线程 从本篇开始,笔者开始了一个新的专题,来说说Java多线程。 在讲解Java多线程之前,我们来了解下...

网友评论

      本文标题:Java多线程(一)

      本文链接:https://www.haomeiwen.com/subject/ndxmzktx.html