线程基本概念

1、线程与进程的区别。

一个程序一定包含一个进程,一个进程一定包含一个线程。线程是程序的最小执行单元。

2、创建线程的三种方式。


1>继承Thread类

/**
*继承Thread类  重写run方法
*/
public class PersonThread extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(Thread.currentThread().getName() + "+++++++" + i);
        }
    }
}

/**
*测试线程
*/
public class ThreadTest {
    public static void main(String[] args) {
        PersonThread person = new PersonThread();
        //创建一个线程
        Thread t1 = new Thread(person);
        t1.start();
   
    }
    
}


2>实现runable接口

/**
 * 实现Runnable接口  实现run方法
 **/
public class PersonRunnable implements Runnable {

    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(Thread.currentThread().getName() + "+++++++" + i);
        }
    }
}

/**
*测试线程
*/
public class ThreadTest {
    public static void main(String[] args) {
        PersonRunnable person = new PersonRunnable();
        //创建一个线程
        Thread t1 = new Thread(person);
        t1.start();
   
    }
    
}


3>callable接口。

/**
*实现Callable接口  实现call方法
*/
public class PersonCallable implements Callable {
    @Override
    public Object call() throws Exception {
        for (int i = 0; i < 5; i++) {
            System.out.println(Thread.currentThread().getName() + "+++++++" + i);
        }
        return null;
    }
/**
*测试线程
*/
public class ThreadTest {
    public static void main(String[] args) {
        //Callable接口  用FutureTask接受返回值
        Callable person = new PersonCallable();
        FutureTask<Object> oneTask1 = new FutureTask<Object>(person);
        //创建一个线程
        Thread t1 = new Thread(oneTask1);
        t1.start();
    }
    
}


4>创建线程池。这个后面详细介绍。

3. 启动线程方法只有一种。


调用线程的start方法启动。

4. 线程的状态转换

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bJLTPmre-1583848910466)(3A6DC0AA9F00460B80EAE6879529C205)]

  • 线程状态之NEW状态:此时只是创建一个线程对象。线程处于初始化状态。
  • 线程状态之Runnable状态:当线程调用start方法时,线程则处于Runnable状态,此时线程并未开始执行,只有等到该线程获取到CPU执行权的时候, 才会真正的去执行线程任务。此时线程的下状态要么是进入Running状态或者结束terminated状态。
  • 线程状态之Running状态:当线程获取CPU执行权时,线程进入Running状态。
  • 线程状态之Block状态:当线程调用Sleep方法、Join方法时,线程进入阻塞状态。当block状态结束后,线程再次进入Runable状态。
  • 线程状态之Waiting状态:当线程调用wait(time)方法时,线程进入timeWaiting状态,当线程调用wait()方法或进入到synchronized方法时,线程进入Waiting状态,当调用notify和notifyAll时,则再次唤醒线程进入Runabled状态。
  • 线程状态之terminated状态:线程终止状态,标志着线程结束。
5、线程有三个特性:
  • 原子性:即一个操作要么全部成功,要么全部失败
  • 可见性:一个变量的修改过程对所有线程是可见的
  • 有序性:程序执行的顺序按照代码的先后顺序执行

如侵权,请告知,立删!

欢迎各位关注我的JAVAERS公众号,陪你一起学习,一起成长,一起分享JAVA路上的诗和远方。在公众号里面都是JAVA这个世界的朋友,公众号每天会有技术类文章,面经干货,也有进阶架构的电子书籍,如Spring实战、SpringBoot实战、高性能MySQL、深入理解JVM、RabbitMQ实战、Redis设计与实现等等一些高质量书籍,关注公众号即可领取哦。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值