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. 线程的状态转换
- 线程状态之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设计与实现等等一些高质量书籍,关注公众号即可领取哦。