Java线程简述

下面总结一下这段时间学习java线程的一些入门基础知识.

一.什么是线程?

  这个问题可以说是每个刚涉及java线程的人都会想知道的问题.究竟什么是线程呢?有的书上说线程就是执行代码的主体;有的书上说线程就是有序地执行代码的控制流程.其实具体点说一个线程就好比是一个人,他的工作任务已经被安排好,他只需要按顺序把任务全部完成,那么他就可以下班回家了!

二.线程有什么特性?

线程最大的特点就是它是独立运行的,不会受到其它线程的干扰.

三.什么是并发,什么是并行?

并发:多个线程同时运行在单核的CPU上时,因为CPU一个时间段只能运行一个线程,但由于CPU分配的时间片很短,因此,在我们看来,多个线程在CPU中是同时运作的,这就是并发.

并行:多个线程同时运行在多核CPU上,在同一个时间段就有可能有多个线程同时运行.

四.创建线程的方法

线程的创建可以有2种方法,一种是继承Thread类,一种是实现Runnable接口.这两种方法究竟有什么不同呢?通过继承Thread类来创建线程时,用户需要覆盖Tread中的run方法,然后new Thread()创建一个线程实例;但通过实现Runnable接口的方法只需实现run方法,并且在创建线程时是将Runnable的实例作为参数传入Tread的构造方法中即可.

五.start()与run()的区别

创建完一个线程实例后,需要调用其start()方法来启动该线程实例,如果不调用start()方法,即使创建出一个线程实例,它也只是相当于一个简单的实例,没有任何意义!当调用了start()方法,启动了线程后,线程进入了可运行状态,那么下一步线程就会调用其run()方法,然后线程执行相应的任务.

假如在没有调用start()方法的情况下,直接调用run()方法.那么会发生什么事情呢?在没有调用start()方法的情况下直接调用run()方法,就相当于线程实例都没有被启动,那么线程实例只是相当于一个普通的实例,当它调用run()方法时,也只是个普通的方法调用,根本没有任何意义.

六.sleep(),wait(),join()区别

  在当前实例中调用sleep()方法,会使当前线程进入睡眠状态,一般调用slee()方法时都会传入一个毫秒数作为当前线程睡眠的时间,线程睡眠相应的毫秒后便会重新苏醒,当前线程处于睡眠状态时是不会释放当前对象锁的,其他线程无法获得当前对象的锁,只能等待,这是便会出现线程堵塞的现象.

  wait()方法与sleep()方法的作用其实是一样的,但它们也有不同的地方;wait()方法使当前线程进入等待状态,进入等待状态的线程会释放当前获得的对象锁,以供后续的线程使用.

  join()方法是等待指定的线程运行结束.当调用join()时,当前线程会等待它所连接的线程不再处于活动状态(既线程运行结束).

七.interrupted()与isInterrupted()区别

  这两个方法都是用来判断线程是否被中断,它们的区别就在于:

  interrupted()方法是一个静态方法,它是用来判断当前线程是否中断,然后返回一个布尔值;

  isInterrupted()方法必须在一个对象上执行,判断所指定的对象是否已经被中断.

你可能感兴趣的:(Java线程简述)