java多线程——启动,生命周期及线程阻塞
发布日期:2021-06-07 05:56:28 浏览次数:5 分类:技术文章

本文共 2638 字,大约阅读时间需要 8 分钟。

线程和进程的区别:

(1)进程就是一个正在执行的程序,当一个程序执行时,内部可能会有多个执行流,每个执行流就是一个进程。
(2)进程之间不能共享内存等资源,同一进程内的多个线程可以共享进程的资源。
(3)线程属于进程,不能独立执行。每个进程至少要有一个线程,成为主线程。
一、 java多线程的创建
1. 有两种创建方法:
(1)继承Thread类,重写run()方法,然后在main()方法中,调用start()方法,启动该线程。
(2)实现Runnable接口,实现run()方法,然后在main()方法中,new一个实例出来,然后创建代理角色+真实角色的引用,再调用start()方法,启动该线程。

public class ThreadTest {
public static void main(String[] args) { //继承Thread类// Thread1 t1=new Thread1();// Thread2 t2=new Thread2();// t1.start();// t2.start(); //实现Runnable接口 Thread3 t3=new Thread3(); Thread t33=new Thread(t3); Thread4 t4=new Thread4(); Thread t44=new Thread(t4); t33.start(); t44.start(); for(int i=0;i<100;i++){ System.out.println("买吃的"+i); } }}/* * 用继承Thread的方法创建多线程 */class Thread1 extends Thread {
public void run(){ for(int i=0;i<50;i++){ System.out.println("买窝头"+i); } }}class Thread2 extends Thread{
public void run(){ for(int i=0;i<50;i++){ System.out.println("买包子"+i); } }}//======================================================/* * 用实现Runnable接口的方法创建多线程 */class Thread3 implements Runnable {
@Override public void run() { for(int i=0;i<50;i++){ System.out.println("蒸馒头"+i); } }}class Thread4 implements Runnable{
@Override public void run() { for(int i=0;i<50;i++){ System.out.println("蒸包子"+i); } }}

2.两种方法的优缺点:

(1)如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。
(2)实现Runnable接口可以可以避免java中的单继承的限制。
(3)实现Runnable接口可以实现同一个资源的多个代码的实现。

//用Thread类实现class Thread5 extends Thread{
int num=10; String name=null; public Thread5(String name){ this.name=name; } public void run(){ for(int i=0;i
public static void main(String[] args) {        /*         * 测试资源共享         */        //测试继承Thread类的资源共享        Thread5 t51=new Thread5("馒头");        t51.start();        Thread5 t52=new Thread5("包子");        t52.start();        //测试实现Runnable接口的资源共享        Thread6 t6=new Thread6();        Thread t61=new Thread(t6,"窝头");        Thread t62=new Thread(t6, "面包");        t61.start();        t62.start();    }}

二、多线程的生命周期

生命周期图
1. 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。
2. 运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。
3. 阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。
线程阻塞的情况:
1. 等待阻塞:运行的线程执行wait(),jvm把该线程放入线程池中;
2. 同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则jvm会把该线程放入锁池中;
3. 其他阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,jvm会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

转载地址:https://blog.csdn.net/Levi_moon/article/details/51570938 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:java多线程——阻塞与唤醒
下一篇:桶排序——java

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年03月02日 04时21分38秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

c语言表达式3649的值是,535个C语言经典实例目录.doc 2019-04-21
c语言Wndproc未定义,小弟我用c语言写了一个windows窗口,为什么有提示未定义的变量类型... 2019-04-21
c语言中malloc数组,如何在C中对malloc()数组进行一行赋值? 2019-04-21
c语言调存储过程,写留言板–调用存储过程出问题 2019-04-21
c语言编程max,C语言编程题及答案.doc 2019-04-21
android测试页面,自动执行界面测试 | Android 开发者 | Android Developers 2019-04-21
android 图片点击变色,Android开发实现ListView点击item改变颜色功能示例 2019-04-21
android增删改查布局,Android之父_增删改查 2019-04-21
vowifi android开关,如何配置VoLTE, ViLTE and VoWifi(IMS config for VoLTE, ViLTE and VoWifi) 2019-04-21
电脑端的mafsvr服务关掉_网吧才是电脑优化的精髓!学会3招你也不用羡慕网吧的流畅了... 2019-04-21
html获取文件路径_HTML 文件路径 2019-04-21
mysql滴的一声就关了_关于mysql数据库在输入密码后,滴的一声直接退出界面的解决办法(详细办法)... 2019-04-21
mysql in 有序_mysql中的in排序 mysql按in中顺序来排序 2019-04-21
mysql 行转列 显示_mysql 行转列 (结果集以坐标显示) 2019-04-21
mysql 完全备份恢复吗_MySQL完全备份与恢复 2019-04-21
wpf 绘制矩形_WPF制作倒影效果 2019-04-21
mariadb mysql 5.7_MariaDB 10.1 和 MySQL 5.7 在普通商用硬件上的表现 2019-04-21
由于连接方在一段时间后没有正确答复或连接的主机_新风换气机使用效果不佳,为何?掌握正确使用方法就好了... 2019-04-21
mysql数据库断电恢复_MySQL数据库InnoDB引擎下服务器断电数据恢复方法 2019-04-21
python入门程序异常_Python 入门 之 异常处理 2019-04-21