`
hunankeda110
  • 浏览: 746500 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java多线程常用操作方法

阅读更多

Java多线程常用操作方法

线程的常用方法

 

取得和设置线程名称
在Thread类中,可以通过getName()方法取得线程的名称,通过setName()设置线程的名称
线程的名称一般在启动线程前设置,但也允许为已经运行的线程设置名称,允许两个Thread对象有相同的名字,但为了清洗,应该尽量避免这种情况的发送
如果程序并没有为线程指定名字,则系统会自动为线程分配一个名称

事例

定义一个类

package com.qn.thread;

public class MyThread implements Runnable{

public void run() {
for (int i = 0; i < 3; i++) {
System.out.println("当前线程的名字:"+Thread.currentThread().getName()+"运行 i"+i);
}
}

}

在test类中进行测试

package com.qn.test;

import com.qn.thread.MyThread;

public class test {
public static void main(String[] args) {
MyThread t=new MyThread();
Thread thread=new Thread(t);
Thread thread1=new Thread(t,"qining");//手动设置线程名称
thread.start();
thread1.start();
}
}

结果

结果知道指定的名称会自动出现,如果没有指定名称线程会自动编号的方式完成,安装 Thread-0,Thread-1 依次编号,实际上肯定在类中存在一个static 属性,用于记录编号

取得当前线程 可以通过currentThread()方法取得当前正在运行的线程对象

下面在test类中测试

package com.qn.test;

import com.qn.thread.MyThread;

public class test {
public static void main(String[] args) {
MyThread t=new MyThread();//实例化Runnable线程子类对象
Thread thread1=new Thread(t,"qining");//手动设置线程名称
thread1.start();
t.run();//直接调用Run方法
}
}

结果

此时程序运行的结果,程序中由主方法直接通过线程对象调用run()方法,所以输出的结果中包含一个“main”,此线程是由“t.run()”因为调用此语句是由主方法完成的,也就是说实际上主方法本身也是一个线程-主线程

既然主方法是由线程的形式出现的,那么java运行时候启动多少线程呢?

至少启动两个

每当java程序执行的时候,实际上都会启动一个JVM,每一个JVM实际上就是操作系统中启动一个进程

java中本身还具备了垃圾回收机制,所以java运行时至少启动两个线程,主线程、GC

判断线程是否还在执行

isAlive()

package com.qn.test;

import com.qn.thread.MyThread;

public class test {
public static void main(String[] args) {
MyThread t=new MyThread();//实例化Runnable线程子类对象
Thread thread1=new Thread(t,"qining");//手动设置线程名称
System.out.println("线程开始执行之前----->"+thread1.isAlive());//判断线程是否启动
thread1.start();
System.out.println("线程开始执行之后----->"+thread1.isAlive());
for (int i = 0; i < 3; i++) {
System.out.println("主线程main运行----->"+i);
}
System.out.println("线程开始执行之后----->"+thread1.isAlive());
}
}

结果

线程的强制运行

在线程操作中,可以使用join()方法让一个线程强制运行,线程强制运行期间,其他线程无法运行,必须等待此线程完成之后才可以继续执行

事例

package com.qn.test;

import com.qn.thread.MyThread;

public class test {
public static void main(String[] args) {
MyThread t=new MyThread();//实例化Runnable线程子类对象
Thread thread1=new Thread(t,"qining");//手动设置线程名称
System.out.println("线程开始执行之前----->"+thread1.isAlive());//判断线程是否启动
thread1.start();
System.out.println("线程开始执行之后----->"+thread1.isAlive());
for (int i = 0; i < 50; i++) {
if(i>10){
try {
thread1.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("main线程运行:"+i);
}
}
}

结果

线程的休眠

使用休眠可以让线程暂停执行

事例

在类中让线程休眠5000

package com.qn.thread;

public class MyThread implements Runnable{

public void run() {
for (int i = 0; i < 50; i++) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("当前线程的名字:"+Thread.currentThread().getName()+"运行 ,i="+i);
}
}

}

在test类中进行测试

package com.qn.test;

import com.qn.thread.MyThread;

public class test {
public static void main(String[] args) {
MyThread t=new MyThread();//实例化Runnable线程子类对象
Thread thread1=new Thread(t,"qining");//手动设置线程名称
thread1.start();
}
}

结果

此时每次执行都会休眠5秒
线程的终断

一个线程可以被另一个线程中断其操作的状态,使用interrupt()方法完成

事例

定义一个MyThread类

package com.qn.thread;

public class MyThread implements Runnable{

public void run() {
System.out.println("1.进入run()方法");
try {
Thread.sleep(2000);
System.out.println("2.已经完成休眠");
} catch (InterruptedException e) {
System.out.println("3.休眠被中断了");
}
System.out.println("4.run()方法正常结束");
}

}

在test类中测试

package com.qn.test;

import com.qn.thread.MyThread;

public class test1 {
public static void main(String[] args) {
MyThread t=new MyThread();//实例化Runnable线程子类对象
Thread thread1=new Thread(t,"qining");//手动设置线程名称
thread1.start();
thread1.interrupt();
}
}

结果

设置后台线程

在java中只要一个程序没有执行完(一个线程在运行),则整个java进程不会消失,所以,此时可以设置一个后台线程,

这样即使java进程结束了,此后台线程依然会继续执行,要实现这样的操作直接使用setDaemon()方法

事例 定义一个类

package com.qn.thread;

public class MyThread implements Runnable{

public void run() {
while(true){
System.out.println(Thread.currentThread().getName());
}
}

}

在test类中进行测试

package com.qn.test;

import com.qn.thread.MyThread;

public class test2 {
public static void main(String[] args) {
MyThread t=new MyThread();//实例化Runnable线程子类对象
Thread thread1=new Thread(t,"qining");//手动设置线程名称
thread1.setDaemon(true);//这只线程在后台执行
thread1.start();
}
}

结果

虽然是死循环但是此时控制台 不在运行而是在虚拟机后台执行

在java中只要一个程序没有执行完(一个线程在运行),则整个java进程不会消失,所以,此时可以设置一个后台线程,这样即使java进程结束了,此后台线程依然会继续执行,要实现这样的操作直接使用setDaemon()方法
最高优先级 Thread.MAX_PRIORITY
中等优先级 Thread.NORM_PRIORITY
最低优先级 Thread.MIN_PRIORITY

事例 定义一个类

package com.qn.thread;

public class MyThread implements Runnable{

public void run() {
for (int i = 0; i < 5; i++) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("当前线程的名字:"+Thread.currentThread().getName()+"运行 ,i="+i);
}

}

}

在test类中进行测试

package com.qn.test;

import com.qn.thread.MyThread;

public class test3 {
public static void main(String[] args) {
Thread thread1=new Thread(new MyThread(),"线程A");//手动设置线程名称
Thread thread2=new Thread(new MyThread(),"线程B");//手动设置线程名称
Thread thread3=new Thread(new MyThread(),"线程C");//手动设置线程名称
thread1.setPriority(Thread.MIN_PRIORITY);
thread2.setPriority(Thread.MAX_PRIORITY);
thread3.setPriority(Thread.NORM_PRIORITY);
thread1.start();
thread2.start();
thread3.start();

}
}

结果

这方法的优先级是什么

事例

package com.qn.test;

import com.qn.thread.MyThread;

public class test4 {
public static void main(String[] args) {
System.out.println("主方法的优先级是:"+Thread.currentThread().getPriority());

}
}

结果

5相当于是中等级优先级

线程的礼让

在线程操作中,也可以使用yield()方法将一个线程的操作暂停时让给其他线程执行

事例 定义一个类

package com.qn.thread;

public class MyThread implements Runnable{

public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName()+"运行 ,i="+i);
if (i==3) {
System.out.print("线程礼让:");
Thread.yield();

}

}
}

}

在test类中进行测试

package com.qn.test;

import com.qn.thread.MyThread;

public class test4 {
public static void main(String[] args) {
MyThread my=new MyThread();
Thread t1=new Thread(my,"线程A");
Thread t2=new Thread(my,"线程B");
t1.start();
t2.start();
}
}

结果

 

分享到:
评论

相关推荐

    java多线程的讲解和实战

    Java多线程是Java编程中的重要概念,尤其在如今的多核处理器环境下,理解并熟练掌握多线程技术对于提高程序性能和响应速度至关重要。本资料详细讲解了Java多线程的原理,并提供了丰富的实战代码,非常适合Java初学者...

    Java多线程机制(讲述java里面与多线程有关的函数)

    Java多线程机制是Java编程中至关重要的一部分,它允许程序同时执行多个任务,提升应用程序的效率和响应性。以下是对各个知识点的详细说明: 9.1 Java中的线程: Java程序中的线程是在操作系统级别的线程基础上进行...

    Java多线程端口快速扫描

    Java多线程端口扫描是网络管理与安全领域中常用的一种技术,主要用于检测网络设备上哪些端口处于开放状态,从而分析网络的安全性或者优化网络配置。本程序通过利用Java的多线程特性,提高了扫描速度,使得在短时间内...

    java多线程编程

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,提升系统效率。在本教程中,我们将深入探讨Java中的多线程设计模式、并发核心编程概念以及线程池的工作原理和种类。 首先,让我们了解什么...

    java多线程的使用和介绍

    ### Java多线程的使用与介绍 #### 什么是多线程? 多线程是指程序能够同时执行多个线程的能力。每个线程都是一个轻量级的进程,可以在单个程序中独立运行,共享该程序的资源。在Java中,多线程是通过`java.lang....

    Java多线程编程核心技术.zip

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,提升系统效率。在Java中,实现多线程主要有两种方式:继承Thread类和实现Runnable接口。本资料"Java多线程编程核心技术.zip"深入探讨了这些...

    JAVA多线程实现数据库之间的数据互导、连接池、及多表插入数据库功能

    1. **Java多线程**: - **线程创建**:Java提供了多种创建线程的方式,如继承Thread类或实现Runnable接口。理解这两种方式的优缺点是基础,例如,实现Runnable接口更利于资源复用。 - **线程同步**:为了避免多...

    Java多线程文档

    在IT领域,尤其是在Java编程中,多...这篇文档通过深入浅出的方式讲解了Java多线程编程的核心概念、常用工具和最佳实践,对于理解和应用Java多线程有着极大的帮助。无论是初学者还是有经验的开发者,都能从中受益匪浅。

    最好的java多线程电子书

    ### 最好的Java多线程电子书 #### 一、并发与多任务 - **并发**:指在同一时间段内,系统能够处理多个任务的能力。在计算机领域中,这意味着多个任务看起来像是同时进行的,但实际上可能是通过快速切换的方式实现...

    深入浅出Java多线程.pdf

    ### 深入浅出Java多线程.pdf #### 知识点概览 本PDF文档涉及了Java多线程的全面介绍,分为基础篇、原理篇和JDK工具篇三个部分,旨在帮助读者深入了解Java多线程的概念、原理及实践应用。 #### 基础篇 **1. 进程...

    Java多线程之基础篇(一).docx

    Java多线程是Java语言中的一个重要特性,它允许程序同时执行多个不同的任务,从而提高程序的效率和响应性。在操作系统层面,实现并发最常见的方式是通过进程和线程。进程是具有独立内存空间的执行单元,而线程是进程...

    JAVA多线程实验报告

    在本实验报告中,我们探讨了Java多线程技术在实际编程中的应用,特别是通过编写applet程序展示了如何实现滚动字符串和动态动画效果。实验主要分为两个部分:滚动字符串和蓝色反弹球。以下是对这些知识点的详细说明:...

    Java多线程运算集合

    ### Java多线程运算集合知识点解析 #### 一、Java多线程概念与原理 - **操作系统中的线程与进程**: - **进程**:指的是一个正在运行的应用程序,每个进程都拥有独立的内存空间。 - **线程**:是进程中的一个...

    Java多线程技术

    Java多线程技术是Java编程语言中的一个重要部分,它允许程序员创建多个线程来执行多个任务,这样可以有效地利用系统资源,提高程序的执行效率。在Java中,多线程的实现主要有两种方式:一种是继承Thread类,另一种是...

    java多线程面试题

    以上知识点涵盖了多线程编程在Java中的基础理论和实际操作,包括线程的创建、运行、异常处理以及线程安全等问题,这些都是在进行Java多线程面试时常见的问题,对于理解和掌握Java多线程编程至关重要。

    Java 多线程学习总结6

    在Java编程语言中,多线程是核心特性之一,它允许程序同时执行多个任务,从而提高了系统的并发性和...在实际开发中,根据需求选择合适的方法和工具,避免线程安全问题,优化并发执行效率,是Java多线程编程的核心目标。

    java多线程.

    ### Java多线程详解 #### 一、Java多线程概览 ...开发者应当深入了解Java多线程的基本概念、创建方式以及常用的线程控制方法,并结合实际应用场景灵活运用高级特性,以提升系统的并发处理能力和稳定性。

    Java多线程编程

    ### Java多线程编程知识点详解 #### 一、线程基础概述 - **定义与特点:** - **线程**是一种比进程更细粒度的执行单元,它允许在一个进程中并发执行多个任务。 - **轻量级进程**:线程有时被称为轻量级进程,...

    40个Java多线程问题总结

    ### Java多线程问题总结 #### 一、多线程的作用与优势 1. **发挥多核CPU的优势:** - 当今计算机硬件普遍配备有多核CPU,利用多线程技术能够有效地分配任务到不同的核心上,使得计算资源得到最大化利用。在双核...

    Java多线程设计模式源代码

    如`Atomic`系列(`AtomicInteger`、`AtomicLong`等)、`Callable`和`Future`接口,以及`ThreadLocal`,都是Java多线程编程中常用的安全工具。源代码会涵盖这些类和接口的使用场景。 总之,这份Java多线程设计模式源...

Global site tag (gtag.js) - Google Analytics