学习笔记之Java多线程(一)

在学习Java多线程之前,需要先了解以下基本概念。

基本概念

  1. 进程
    进程是程序的一次执行过程,是资源分配的基本单位,有独立的内存空间。
  2. 线程
    线程是调度执行的基本单位,是程序的一条执行路径。
  3. 并行
    多个处理器同时执行任务,是真正的同时进行,如4核cpu可以同时处理4个任务。
  4. 并发
    单个处理器通过调度算法,间断地切换并执行多个任务,由于时间片很短,看起来像是同时执行,是逻辑上的同时。

为什么使用多线程

  1. 线程是cpu调度执行的基本单位,使用多线程可以抢占更多的时间片,获得更多的执行机会。
  2. 单线程情况下按顺序执行逻辑,在处理用时较久的任务时下面的代码会被阻塞,可能造成卡顿。可以新建线程把耗时的操作放到线程独立执行,不会阻塞主线程的执行。

Java怎么创建线程

Java创建线程主要有以下三种方法。

  1. 继承Thread类,代码如下:
public class ThreadTest extends Thread{
    @Override
    public void run() {
        System.out.println(getName()+"do something");
    }

    public static void main(String[] args) {
        Thread t1 = new ThreadTest();
        t1.start();
    }
}
  1. 实现Runnable接口
import java.util.Currency;

public class RunnableTest implements Runnable{
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+"do something");
    }

    public static void main(String[] args) {
        Runnable rt = new RunnableTest();
        Thread t1 = new Thread(rt);
    }
}
  1. 实现Callable接口
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class CallableTest implements Callable {
    @Override
    public Object call() throws Exception {
        System.out.println(Thread.currentThread().getName()+"do something");
        return Thread.currentThread().getName()+"return something";
    }

    public static void main(String[] args) {
        Callable ct = new CallableTest();
        FutureTask futureTask = new FutureTask(ct);
        Thread t1 = new Thread(futureTask);
        t1.start();
        try {
            Thread.sleep(1000);
            System.out.println(futureTask.get());
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }
    }
}

run和start的区别

run方法只是一个普通的成员方法,定义线程启动时干的事。直接调用run方法会在当前线程执行,调用start方法会启动新线程执行run方法中的代码。

选择Thread,Runnable还是Callable

继承Thread和实现Runnable能实现同样的效果,但因为Java单继承多实现的特点,一般选择实现Runnable接口。
Callable是jdk1.5后出的,之前的两种创建线程的方法都无法返回结果,使用Callable能返回结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值