Java并发编程(一)Thread详解

 

一、概述

在开始学习Thread之前,我们先来了解一下 线程和进程之间的关系:

线程(Thread)是进程的一个实体,是CPU调度和分派的基本单位。 线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。 线程和进程的关系是:线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。

由上描述,可以得知线程作为cpu的基本调度单位,只有把多线程用好,才能充分利用cpu的多核资源。

本文基于JDK 8(也可以叫JDK 1.8)。

二、线程使用

2.1 启动线程

创建线程有四种方式:

  • 实现Runnable接口
  • 继承Thread类
  • 使用JDK 8 的Lambda
  • 使用Callable和Future

2.1.1 Runnable创建方式

public class MyThread implements Runnable {     @Override     public void run() {         System.out.println(Thread.currentThread().getName());     } }
Thread thread = new Thread(new MyThread()); thread.start();

2.1.2 继承Thread创建方式

public class MyThread extends Thread{     @Override     public void run() {         System.out.println(Thread.currentThread().getName());     } }
MyThread thread = new MyThread(); thread.start();

以上代码有更简单的写法,如下:

Thread thread = new Thread(){     @Override     public void run() {         System.out.println(Thread.currentThread().getName());     } }; thread.start();

2.1.3 Lambda创建方式

new Thread(()-> System.out.println(Thread.currentThread().getName())).start();

2.1.4 使用Callable和Future

看源码可以知道Thread的父类是Runnable是JDK1.0提供的,而Callable和Runnable类似,是JDK1.5提供的,弥补了调用线程没有返回值的情况,可以看做是Runnable的一个补充,下面看看Callable的实现。

public class MyThread implements Callable<String> {      @Override     public String call() throws Exception {         System.out.println(Thread.currentThread().getName());         return Thread.currentThread().getName();     } }
Callable<String> callable = new MyThread(); FutureTask<String> ft = new FutureTask<>(callable); new Thread(ft,"threadName").start(); System.out.println(ft.get());

关键字:

50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信