1.线程的两种实现方法:
(1)继承Thread类
PasswordHandle.java
package thread;
public class PasswordHandle extends Thread {
private boolean interruptFlag;
private String mask;
public PasswordHandle() {
this('*');
}
public PasswordHandle(char maskchar) {
this.interruptFlag = true;
mask = maskchar+"";
}
public void setInterruptFlag(boolean interruptFlag) {
this.interruptFlag = interruptFlag;
}
@Override
public void run() {
while (true) {
if(!interruptFlag) break;
System.out.print(mask);
try {
Thread.currentThread().sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
pwsThreadTest.java
package thread;
import java.util.Scanner;
public class pwsThreadTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print("name:");
String name = scanner.next();
System.out.print("password:");
PasswordHandle pthread = new PasswordHandle();
pthread.start();
String pws = scanner.next();
pthread.setInterruptFlag(false);
if ("suky".equals(name) && "qwe123".equals(pws)) {
System.out.println("Welcome " + name +"!");
break;
} else {
System.out.println("The name or password is error,please try again!");
}
}
}
}
(2)继承Runnable接口
修改PasswordHandle.java 继承接口Runnable。启动线程部分改成
PasswordHandle handle = new PasswordHandle();
Thread pthread = new Thread(handle);
pthread.start();
2.main方法开始至少会启动两个线程,一个主线程,还有一个是垃圾收集器的线程,后者是一个非Deamon线程,不会随着主线程的结束而停止工作。当我们希望一个线程在产生它的线程结束后停止,可以通过setDaemon(true)方法来设置,使之成为Deamon线程。
示例:
package thread;
public class DeamonTest {
/**
* @param args
*/
public static void main(String[] args) {
Thread thread = new Thread(new Runnable() {
public void run() {
while (true) {
System.out.print("B");
}
}
});
thread.setDaemon(true);// 设定为Deamon线程
thread.start();
for(int i=0;i<5;i++){
System.out.print("A");
}
}
}
3.线程生命周期:创建线程,可执行,阻塞,终止
-
start():线程进入可执行状态,执行run方法
-
sleep()/wait():让线程处于阻塞状态暂停一段时间,不同在于wait会释放当前线程占有 资源的锁,而sleep不会。所以wait()一般出现在synchronized范畴内
synchronized(this) {
this.wait();
}
-
notify()/notifyAll():重新把锁还给阻塞的线程重而使其继续执行。
4.线程优先权
1 (Thread.MIN_PRIORITY)
10(Thread.MAX_PRIORITY)
默认:5(Thread.NORM_PRIORITY),手动设置调用setPriority方法
public final void setPriority(int newPriority) {
ThreadGroup g;
checkAccess();
if (newPriority > MAX_PRIORITY || newPriority < MIN_PRIORITY) {
throw new IllegalArgumentException();
}
if((g = getThreadGroup()) != null) {
if (newPriority > g.getMaxPriority()) {
newPriority = g.getMaxPriority();
}
setPriority0(priority = newPriority);
}
}
5.InterruptedException异常
当使用sleep(),在暂停的时间内中断的话,会抛出此异常。示例:
package thread;
public class InterruptTest {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("Thread A start...");
Thread threadB = new Thread(new Runnable(){
public void run(){
try{
System.out.println("Thread B start...");
for(int i=0;i<5;i++){
Thread.sleep(1000);
System.out.println("Thread B execute...");
}
System.out.println("Thread B end...");
}catch(InterruptedException e){e.printStackTrace();}
}
});
threadB.start();
threadB.interrupt();//立即中断
}
}
输出:
Thread A start...
Thread B start...
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at thread.InterruptTest$1.run(InterruptTest.java:16)
at java.lang.Thread.run(Thread.java:619)
6.join():线程B加入线程A,A等待B完成后,继续A。
7.线程停止: sleep,wait方法,可以使用interrupt();I/O则必须等到输入/输出动作结束,替代的方法可以是抛出异常,离开 run()。
分享到:
相关推荐
《汪文君JAVA多线程编程实战》是一本专注于Java多线程编程的实战教程,由知名讲师汪文君倾力打造。这本书旨在帮助Java开发者深入理解和熟练掌握多线程编程技术,提升软件开发的效率和质量。在Java平台中,多线程是...
这份“JAVA多线程编程技术PDF”是学习和掌握这一领域的经典资料,涵盖了多线程的全部知识点。 首先,多线程的核心概念包括线程的创建与启动。在Java中,可以通过实现Runnable接口或继承Thread类来创建线程。创建后...
Java多线程编程实战指南(核心篇) 高清pdf带目录 随着现代处理器的生产工艺从提升处理器主频频率转向多核化,即在一块芯片上集成多个处理器内核(Core),多核处理器(Multicore Processor)离我们越来越近了――如今...
Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过继承Thread类或实现Runnable接口来实现。本教程将深入探讨Java多线程的各个方面...
Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过`Thread`类和并发工具来实现,接下来我们将深入探讨这些关键知识点。 1. **...
Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过继承Thread类或实现Runnable接口来实现。本教程《Java多线程编程核心技术》将...
《Java多线程编程实战指南》这本书深入浅出地讲解了Java多线程的核心概念和实战技巧,分为核心篇和设计模式篇,旨在帮助开发者掌握并应用多线程技术。 1. **线程基础** - **线程的创建**:Java提供了两种创建线程...
《Java多线程编程实战指南-核心篇》是一本深入探讨Java并发编程的书籍,旨在帮助读者掌握在Java环境中创建、管理和同步线程的核心技术。Java的多线程能力是其强大之处,使得开发者能够在同一时间执行多个任务,提高...
《Java多线程编程核心技术》建议猿友们读两遍,因为其写得没有那么抽象,第一遍有些概念不是很理解,可以先跳过并记录起来,第一遍阅读的目的主要是了解整个架构。第二遍再慢慢品味,并贯穿全部是指点来思考,并将...
这份“Java多线程编程指南”深入探讨了这一主题,为中级到高级的Java开发者提供了宝贵的资源。 首先,多线程的基础概念是理解整个主题的关键。线程是程序执行的最小单元,每个线程都有自己的程序计数器、虚拟机栈、...
《深入学习:Java多线程编程》是一本专注于Java并发技术的专业书籍,旨在帮助开发者深入理解和熟练运用Java中的多线程编程。Java多线程是Java编程中的核心部分,尤其在现代高性能应用和分布式系统中不可或缺。理解并...
本书“Java多线程编程实例”深入浅出地讲解了如何在Java环境中实现多线程操作,尽管出版时间较早,但其内容的经典性和实用性使其在现代开发中仍具有极高的参考价值。 首先,我们要理解Java中的线程是如何创建的。...
### Java多线程编程经验 #### 一、Java线程:概念与原理 现代操作系统都是多任务操作系统,其中多线程是一种重要的实现多任务的方式。线程是进程内的一个执行单位,一个进程可以包含多个线程。例如,在Java应用...
Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,提升系统效率。在Java中,实现多线程主要有两种方式:继承Thread类和实现Runnable接口。本资料"Java多线程编程核心技术.zip"深入探讨了这些...
《Java多线程编程实例》这本书深入浅出地探讨了Java中的多线程编程,通过丰富的实例帮助读者理解和掌握这一复杂主题。随书源码提供了实际操作的机会,以便读者能够亲手实践书中的示例,加深理解。 1. **线程创建...
从给定的文件信息中,我们可以提取出关于Java多线程编程的重要知识点,涉及线程创建、线程生命周期以及线程间的同步与通信等核心概念。 ### Java多线程编程实例解析 #### 1. 创建线程的方式 在Java中,创建线程有...
Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程可以通过实现Runnable接口或继承Thread类来创建。下面我们将深入探讨Java多线程编程的...
### Java多线程编程详解与实战案例 #### 理解多线程概念与Java内存模型 多线程,作为现代编程中的一项关键技术,允许在单一应用程序中并发执行多个指令流,每个这样的指令流被称为一个线程。在Java中,线程被视为...