本文配合实例较为详细的讲解了Java的线程技术,相信对于深入理解Java程序设计有一定的帮助。具体如下:
很多人在学习JAVA时都对线程都有一定的了解,而当我们开始接触Android开发时,才真真正正的发现了线程是多麽的重要,本文就把对Java线程的用法心得分享给大家,供大家参考。
首先,大家一定要分清线程和进程不是一回事,进程是什么呢?进程就如我们需要执行class文件,而线程才是真正调用CPU资源来运行的。一个class文件一般只有一个进程,但线程可以有很多个,线程的执行是一种异步的执行方式。
一、如何在main函数中再开启一个线程:
示例代码如下:
public class Thread_one { public static void main(String [] args){ Run run = new Run(); //run.run();//此为方法的调用,和线程有着天壤之别 Thread thread = new Thread(run); thread.start();//启动线程,调用线程的run()方法 for(int i=1; i<=20; i++){ System.out.println("主线程i的 值:--------"+i); } } } class Run implements Runnable{ @Override public void run() { for(int i=1; i<=20; i++){ System.out.println("子线程i的 值:"+i); } } }
二、线程中的sleep方法
示例代码如下:
public class Thread_sleep { /* * 线程停顿 */ public static void main(String [] args){ Runone run = new Runone(); Thread thread = new Thread(run); thread.start(); try { Thread.sleep(5000); thread.interrupt();//中断线程的执行 //thread.stop();//相对中断线程,stop过于粗暴,不建议使用,一般在需要强制关闭子线程时方使用此方法 } catch (InterruptedException e) { e.printStackTrace(); } } } class Runone implements Runnable{ @Override public void run() { for(int i=1 ; i<10; i++){ try { Thread.sleep(1000); System.out.println("-----"+new Date()+"-----"); } catch (InterruptedException e) { return ;//当捕获到子线程被中断时,直接关闭子线程 } } } }
在这里特别说明一点,thread.interrupt();可以中断线程的执行,相对stop温柔那么一点点,不过还不是最佳的关闭线程的方法,下面就为大家提供一种方式:
public class Thread_stop { public static void main(String [] args){ Runthree run = new Runthree(); Thread th = new Thread(run); th.start(); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } run.setStop(); } } class Runthree implements Runnable{ boolean flag; @Override public void run() { flag = true; int i = 0; while(flag){ try { System.out.println("子线程----"+(i++)); Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } public void setStop(){ flag = false; } }
下面就简单给大家介绍一下线程中的合并和让出:
一、如何合并线程,此处调用了join()方法
示例代码如下:
public class Thread_join { /* * 合并线程 */ public static void main(String [] args){ Runtwo run = new Runtwo(); Thread thread = new Thread(run); thread.start(); try { thread.join();//合并线程,此时相当于方法调用 } catch (InterruptedException e) { e.printStackTrace(); } for(int i=0; i<10; i++){ System.out.println("主线程:"+i); } } } class Runtwo implements Runnable{ @Override public void run() { for(int i=0; i<10; i++){ System.out.println("子线程:----"+i); } } }
二、如何让出线程,此处调用了Thread的yield()方法,如下所示:
public class Thread_yield { /**让出CPU * @param args */ public static void main(String[] args) { Th th = new Th("aaa"); th.start(); for(int i = 0 ; i<=10; i++){ System.out.println("主线程----"+i); } } } class Th extends Thread{ Th(){} Th(String s){super(s);} @Override public void run() { for(int i = 0; i<=10; i++){ if(i%3!=0){ System.out.println("子线程"+i); }else{ System.out.println("子线程i="+i+" 线程进行切换"); yield();//从Thread继承方可使用此方法 } } } }
最后和大家分享一下关于线程的优先级的问题,代码如下所示:
public class Thread_priority { /* * priority设置线程的优先级 * Thread默认的优先级为5;Thread的最大优先级为10,最小为0 */ public static void main(String [] args){ T1 t1 = new T1(); T2 t2 = new T2(); t1.start(); //t1.setPriority(Thread.NORM_PRIORITY+3);//设置t1的优先级 t2.start(); } } class T1 extends Thread{ @Override public void run() { for(int i = 0; i<50; i++){ System.out.println("线程T1-----"+i); } } } class T2 extends Thread{ @Override public void run() { for(int i = 0; i<50; i++){ System.out.println("线程T2"+i); } } }
相信大家通过以上代码基本已经了解JAVA中的线程机制,希望本文所述对大家深入学习Java程序设计有所帮助。
本文向大家介绍详解Java线程-守护线程与用户线程,包括了详解Java线程-守护线程与用户线程的使用技巧和注意事项,需要的朋友参考一下 干java 开发这么多年, 之前一直没留意java 进程还区分守护进程和用户进程。守护进程这个概念最早还是在linux系统中接触的,直到近期使用java开发心跳检测功能时,使用Timer时才发现原来java也有守护线程的概念。 1. Java 线程 1.1 守护线
本文向大家介绍Java多线程用法的实例详解,包括了Java多线程用法的实例详解的使用技巧和注意事项,需要的朋友参考一下 Java多线程用法的实例详解 前言: 最全面的java多线程用法解析,如果你对Java的多线程机制并没有深入的研究,那么本文可以帮助你更透彻地理解Java多线程的原理以及使用方法。 1.创建线程 在Java中创建线程有两种方法:使用Thread类和使用Runnable接口。在使用
本文向大家介绍Java Thread多线程详解及用法解析,包括了Java Thread多线程详解及用法解析的使用技巧和注意事项,需要的朋友参考一下 最全面的java多线程用法解析,如果你对Java的多线程机制并没有深入的研究,那么本文可以帮助你更透彻地理解Java多线程的原理以及使用方法。 1.创建线程 在Java中创建线程有两种方法:使用Thread类和使用Runnable接口。在使用Run
本文向大家介绍Java 线程池详解,包括了Java 线程池详解的使用技巧和注意事项,需要的朋友参考一下 系统启动一个线程的成本是比较高的,因为它涉及到与操作系统的交互,使用线程池的好处是提高性能,当系统中包含大量并发的线程时,会导致系统性能剧烈下降,甚至导致JVM崩溃,而线程池的最大线程数参数可以控制系统中并发线程数不超过次数。 一、Executors 工厂类用来产生线程池,该工厂类包含以下几个静
本文向大家介绍java 线程创建多线程详解,包括了java 线程创建多线程详解的使用技巧和注意事项,需要的朋友参考一下 Java 线程类也是一个 object 类,它的实例都继承自 java.lang.Thread 或其子类。 可以用如下方式用 java 中创建一个线程,执行该线程可以调用该线程的 start()方法: Tread thread = new Thread(); thread.sta
本文向大家介绍详解Java多线程编程中CountDownLatch阻塞线程的方法,包括了详解Java多线程编程中CountDownLatch阻塞线程的方法的使用技巧和注意事项,需要的朋友参考一下 直译过来就是倒计数(CountDown)门闩(Latch)。倒计数不用说,门闩的意思顾名思义就是阻止前进。在这里就是指 CountDownLatch.await() 方法在倒计数为0之前会阻塞当前线程。