JAVA线程用法详解
2023-06-13 09:15:44 时间
本文配合实例较为详细的讲解了Java的线程技术,相信对于深入理解Java程序设计有一定的帮助。具体如下:
很多人在学习JAVA时都对线程都有一定的了解,而当我们开始接触Android开发时,才真真正正的发现了线程是多麽的重要,本文就把对Java线程的用法心得分享给大家,供大家参考。
首先,大家一定要分清线程和进程不是一回事,进程是什么呢?进程就如我们需要执行class文件,而线程才是真正调用CPU资源来运行的。一个class文件一般只有一个进程,但线程可以有很多个,线程的执行是一种异步的执行方式。
一、如何在main函数中再开启一个线程:
示例代码如下:
publicclassThread_one{ publicstaticvoidmain(String[]args){ Runrun=newRun(); //run.run();//此为方法的调用,和线程有着天壤之别 Threadthread=newThread(run); thread.start();//启动线程,调用线程的run()方法 for(inti=1;i<=20;i++){ System.out.println("主线程i的值:--------"+i); } } } classRunimplementsRunnable{ @Override publicvoidrun(){ for(inti=1;i<=20;i++){ System.out.println("子线程i的值:"+i); } } }
二、线程中的sleep方法
示例代码如下:
publicclassThread_sleep{ /* *线程停顿 */ publicstaticvoidmain(String[]args){ Runonerun=newRunone(); Threadthread=newThread(run); thread.start(); try{ Thread.sleep(5000); thread.interrupt();//中断线程的执行 //thread.stop();//相对中断线程,stop过于粗暴,不建议使用,一般在需要强制关闭子线程时方使用此方法 }catch(InterruptedExceptione){ e.printStackTrace(); } } } classRunoneimplementsRunnable{ @Override publicvoidrun(){ for(inti=1;i<10;i++){ try{ Thread.sleep(1000); System.out.println("-----"+newDate()+"-----"); }catch(InterruptedExceptione){ return;//当捕获到子线程被中断时,直接关闭子线程 } } } }
在这里特别说明一点,thread.interrupt();可以中断线程的执行,相对stop温柔那么一点点,不过还不是最佳的关闭线程的方法,下面就为大家提供一种方式:
publicclassThread_stop{ publicstaticvoidmain(String[]args){ Runthreerun=newRunthree(); Threadth=newThread(run); th.start(); try{ Thread.sleep(5000); }catch(InterruptedExceptione){ e.printStackTrace(); } run.setStop(); } } classRunthreeimplementsRunnable{ booleanflag; @Override publicvoidrun(){ flag=true; inti=0; while(flag){ try{ System.out.println("子线程----"+(i++)); Thread.sleep(1000); }catch(InterruptedExceptione){ e.printStackTrace(); } } } publicvoidsetStop(){ flag=false; } }
下面就简单给大家介绍一下线程中的合并和让出:
一、如何合并线程,此处调用了join()方法
示例代码如下:
publicclassThread_join{ /* *合并线程 */ publicstaticvoidmain(String[]args){ Runtworun=newRuntwo(); Threadthread=newThread(run); thread.start(); try{ thread.join();//合并线程,此时相当于方法调用 }catch(InterruptedExceptione){ e.printStackTrace(); } for(inti=0;i<10;i++){ System.out.println("主线程:"+i); } } } classRuntwoimplementsRunnable{ @Override publicvoidrun(){ for(inti=0;i<10;i++){ System.out.println("子线程:----"+i); } } }
二、如何让出线程,此处调用了Thread的yield()方法,如下所示:
publicclassThread_yield{ /**让出CPU *@paramargs */ publicstaticvoidmain(String[]args){ Thth=newTh("aaa"); th.start(); for(inti=0;i<=10;i++){ System.out.println("主线程----"+i); } } } classThextendsThread{ Th(){} Th(Strings){super(s);} @Override publicvoidrun(){ for(inti=0;i<=10;i++){ if(i%3!=0){ System.out.println("子线程"+i); }else{ System.out.println("子线程i="+i+"线程进行切换"); yield();//从Thread继承方可使用此方法 } } } }
最后和大家分享一下关于线程的优先级的问题,代码如下所示:
publicclassThread_priority{ /* *priority设置线程的优先级 *Thread默认的优先级为5;Thread的最大优先级为10,最小为0 */ publicstaticvoidmain(String[]args){ T1t1=newT1(); T2t2=newT2(); t1.start(); //t1.setPriority(Thread.NORM_PRIORITY+3);//设置t1的优先级 t2.start(); } } classT1extendsThread{ @Override publicvoidrun(){ for(inti=0;i<50;i++){ System.out.println("线程T1-----"+i); } } } classT2extendsThread{ @Override publicvoidrun(){ for(inti=0;i<50;i++){ System.out.println("线程T2"+i); } } }
相信大家通过以上代码基本已经了解JAVA中的线程机制,希望本文所述对大家深入学习Java程序设计有所帮助。
相关文章
- java grouping,介绍 Java 8 groupingBy Collector
- java常量池在方法区还是堆_JAVA常量池
- 【说站】java线程池死锁的产生及处理
- 大数据必学Java基础(七十七):线程的生命周期和常见方法
- Java map转实体类_java实体类转json
- Java 线程池的创建过程分析详解编程语言
- java 检测 Java 是否运行在64bit 的JVM上详解编程语言
- java 强制中断线程运行详解编程语言
- java countDownLatch 线程辅助类详解编程语言
- Java 线程池测试类详解编程语言
- java基础学习总结——线程(二)详解编程语言
- java线程间通信详解编程语言
- 深入学习 Java 线程池详解编程语言
- 了解Java线程的start方法如何回调run方法详解编程语言
- Java 线程池详解编程语言
- Java通过wait()和notifyAll()方法实现线程间的通信详解编程语言
- java线程 公平锁 ReentrantLock(boolean fair)详解编程语言
- Java多线程(七):线程休眠详解编程语言
- MySQL驱动程序:Java集成简易操作(mysql的java驱动)
- 服务器是否开机Java检查Linux服务器开机状态(java判断linux)
- 如何在Linux系统下成功安装Java?(linux下安装java)
- 让Java开发能力在Linux下得到更大发挥(java linux编程)
- 查找Java进程:Linux解决方案(linux查找java进程)
- 秘籍学习实现纯Java版Redis(纯java版redis)
- 从Java到Oracle轻松操作数据库(java写oracle库)
- 项目Java项目中展现Redis新型性能优势(redis运用在java)