Java中多线程小伙伴们知道吗?这是java中的一个核心技术,它有哪些概念?又该如何实现呢?下面跟小编一起看看吧。
一、多线程的概念
1、程序
一个独立运行的内存空间,开发出来的一个应用。
2、线程和进程
一个程序就是一个进程,一个进程中至少有一个线程(main)。
线程就是一个任务,多个线程就表示多个任务[同时]执行。
3、单核和多核cpu
单核在处理多线程的时候,效率不一定高
多核比单核再处理多线程时,更加高效
4、并行和并发
并行:同一时间,多个事情同时进行。一边听歌,一边撸代码
并发:同一时间,多个人做同一件事。秒杀 1万个人同时抢100台手机
多线程结构概念图:
二、线程的状态
1、出生状态(New)
2、可运行状态(Runnable)
3、运行状态(Running)
4、阻塞状态(Blocked)
5、死亡状态(Dead)
start():启动线程,线程从出生状态变成可运行状态,不保证立刻运行,把控制器交给了CPU调度,什么来调度了什么时候运行。
---调用下列方法进入阻塞状态
sleep():休眠
join():加入,合并线程
wait():等待(Object的方法)
synchronized:同步锁
---从运行状态回到可运行状态
yield():礼让线程
---从运行状态到死亡状态
任务完成
异常退出
stop()/destory()方法(不推荐,已废弃),建议使用标记来控制结束
三、停止线程
建议使用一个变量,如boolean类型,来控制线程结束。
四、sleep
sleep(时间毫秒)指定当前线程阻塞的毫秒数
sleep存在异常InterruptedException,一定要处理
sleep时间达到后线程进入可运行状态(就绪状态)
sleep可以模拟网络阻塞,做倒计时(计时器)
每个对象都有一把锁,sleep不会释放锁
五、线程具体实现
继承Thread类创建线程
Thread类本质上是实现了Runnable接口的一个实例,代表一个线程的实例。启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。这种方式实现多线程很简单,通过自己的类直接extend Thread,并复写run()方法,就可以启动新线程并执行自己定义的run()方法。如:
public class MyThread extends Thread { public void run() { System.out.println("MyThread.run()"); } } MyThread myThread1 = new MyThread(); MyThread myThread2 = new MyThread(); myThread1.start(); myThread2.start();
以上就是关于多线程的所有内容了,多线程是项目开发的常用技术之一,如果还需要了解更多线程相关java常见问答知识就请关注我们网站吧。
推荐阅读: