`

java多线程技术

阅读更多
[size=large]
1 了解程序、进程、线程的概念

进程是指运行中的应用程序,每一个进程都有自己独立的内存空间。
线程是进程内部单一的一个顺序控制流

基于进程的特点是允许计算机同时运行两个或更多的程序
基于线程的多任务处理环境中,线程是最小的处理单位

    基于线程所需的开销更少
在多任务中,各个进程需要分配它们自己独立的地址空间
多个线程可共享相同的地址空间并且共同分享同一个进程

进程间调用涉及的开销比线程间通信多
线程间的切换成本比进程间切换成本低

简而言之,一个程序至少有一个进程,一个进程至少有一个线程.

2 主线程:
在Java程序启动时,一个线程立刻运行,该线程通常称为程序的主线程。
主线程的重要性体现在两个方面:
它是产生其他子线程的线程。
通常它必须最后完成执行,因为它执行各种关闭动作。
public class TestMainThread {
	public static void main(String[] args) {
		// 获取主线程
		Thread thread = Thread.currentThread();
		System.out.println("主线程:" + thread.getName());
		System.out.println("主线程优先级:" + thread.getPriority());
		System.out.println("主线程是否处于活动状态:" + thread.isAlive());

		// 自定义线程的使用
		System.out.println("自定义线程的使用!");
		// 1 extends Thread
		SubThread subThread = new SubThread();
		subThread.setName("自定义线程1");
		System.out.println("线程状态(启动前):" + subThread.getState());

		// 启动线程
		subThread.start();
		System.out.println("线程状态(启动后):" + subThread.getState());
		// 2 implements Runnable
		ImpThread impThreadRunnable = new ImpThread();

		Thread impThread = new Thread(impThreadRunnable);
		impThread.start();

	}



3 创建线程的两种方式:

声明一个 Thread 类的子类,并覆盖 run() 方法。
声明一个实现 Runnable 接口的类,并实现 run() 方法。

-----------------------------------------------------------------------------------------
线程的状态:

Thread.State 线程状态。线程可以处于下列状态之一:

1 NEW 至今尚未启动的线程处于这种状态。
2 RUNNABLE 正在 Java 虚拟机中执行的线程处于这种状态。
3 BLOCKED 受阻塞并等待某个监视器锁的线程处于这种状态。
4 WAITING 限期地等待另一个线程来执行某一特定操作的线程处于这种状态。
5 TIMED_WAITING 等待另一个线程来执行取决于指定等待时间的操作的线程处于这种状态。
6 TERMINATED 已退出的线程处于这种状态。

通过方法getState()获取线程的当前状态
-----------------------------------------------------------------------------------------------------------------
线程的优先级:
int MAX_PRIORITY 10   线程可以具有的最高优先级
int MIN_PRIORITY 1    线程可以具有的最低优先级
int NORM_PRIORITY 5   分配给线程的默认优先级

     更改线程的优先级:setPriority(int newPriority)
     获取线程的优先级  int  getPriority()
-------------------------------------------------------------------------------------------------------
守护线程:
         setDaemon(boolean b) 将线程标记为守护线程或用户线程。
                              当正在运行的线程都是守护线程时,Java 虚拟机退出。
                              该方法必须在启动线程前调用
-----------------------------------------------------------------------------------------------------------------
掌握如何创建,结束线程
--------------------------------结束线程三种方式-----------------------------------------------------------------

线程常用方法总结:
Thread()
Thread(Runnable target);//将 target 作为其运行对象
Thread(String name);//指定线程名称,每个线程都有一个标识名,多个线程可以同名。如果线程创建时没有指定标识名,就会为其生成一个新名称
Thread(Runnable target, String name);

start() 启动线程;Java 虚拟机调用该线程的 run 方法//不能多次启动
run() 无须也不可调用,线程功能方法;
stop() //无条件中断线程;(不建议使用)
interrupt() //有条件中断线程;
sleep(long s) 使线程睡眠;让出cpu资源; (static),在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)
currentThread() 获取当前正在执行的线程;  (static)
isAlive() 判断线程是否在活动状态;如果线程已经启动且尚未终止,则为活动状态。
yield() 让出cpu资源;暂停当前正在执行的线程对象,并执行其他线程。
jion() 等待线程消亡;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class CloseThread {
	public static void main(String[] args) {
		// SubThread1 thread1 = new SubThread1();
		// thread1.start();
		// try {
		// Thread.sleep(3000);
		// } catch (InterruptedException e) {
		// // TODO Auto-generated catch block
		// e.printStackTrace();
		// }
		// thread1.setStop(true);

		// SubThread2 thread2 = new SubThread2();
		// thread2.start();
		// try {
		// Thread.sleep(3000);
		// } catch (InterruptedException e) {
		// // TODO Auto-generated catch block
		// e.printStackTrace();
		// }
		// thread2.interrupt();

		SubThread3 thread3 = new SubThread3();
		thread3.start();
	}
}

class SubThread1 extends Thread {
	// 结束线程 1:修改标志
	private boolean isStop;
	int count;

	public void setStop(boolean isStop) {
		this.isStop = isStop;
	}

	@Override
	public void run() {
		System.out.println("线程开始了》》》》》》》》");
		while (!isStop) {
			System.out.println("线程计算:" + (count++));
		}
		System.out.println("线程结束了》》》》》》》》");
	}

}

class SubThread2 extends Thread {
	// 结束线程 2 interrupt()
	int count;

	@Override
	public void run() {
		System.out.println("线程开始了》》》》》》》》");
		while (!this.isInterrupted()) {
			System.out.println("线程计算:" + (count++));
		}
		System.out.println("线程结束了》》》》》》》》");
	}

}

class SubThread3 extends Thread {
	// 结束线程 3引发异常
	File file = new File("./data/20_IO流编程1.txt");
	FileInputStream fileInputStream = null;
	int value;

	SubThread3() {
		try {
			fileInputStream = new FileInputStream(file);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Override
	public void run() {

		while (true) {
			try {
				value=fileInputStream.read();
				System.out.println(value);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				break;
			}
		}

	}
}

4、 线程同步:
      什么是同步:当两个或多个线程需要访问同一资源时,它们需要以某种顺序来确保该资源某一时刻只能被一个线程使用的方式称为同步。
      java如何实现同步:
两种方式实现同步:
    使用同步方法:
      synchronized void methodA() {  }
    使用同步块:
      synchronized(object) {
           //要同步的语句
      }
public class Account {
	private double money;

	// 方法同步synchronized
	public void add(double money) {
		synchronized ("") {

			double temp = this.money;
			// 模拟网路延迟
			try {
				Thread.sleep(1);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			this.money = temp + money;
		}
	}

	public double getMoney() {
		return this.money;
	}

}

public class AccountThread extends Thread {
	private Account account;

	public AccountThread(Account account) {
		this.account = account;
	}

	@Override
	public void run() {
		for (int i = 0; i < 100; i++) {
			this.account.add(100);
		}
	}

	public static void main(String[] args) {
		Account account = new Account();
		System.out.println("开始存钱......");
		// 模拟50个线程为同一账户存钱
		AccountThread[] threads = new AccountThread[50];
		for (int i = 0; i < threads.length; i++) {
			threads[i] = new AccountThread(account);
			threads[i].start();
		}
		// 等待存钱完毕
		try {
			Thread.sleep(10000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("存钱完毕......");
		System.out.println("账户余额:" + account.getMoney());

	}
}


[/size]
分享到:
评论

相关推荐

    Java多线程技术及其在网络编程中的应用.pdf

    ### Java多线程技术及其在网络编程中的应用 #### 引言 Java作为一种强大的面向对象的编程语言,由SUN公司开发,旨在支持分布式计算。它不仅具备简单的语法、面向对象的特点,还拥有跨平台的特性、高可靠性和安全性...

    Java多线程技术在网络通信系统中的应用.pdf

    总结来说,Java多线程技术在网络通信系统中的应用包括了线程间通信的原理、多线程实现网络通信的原理、线程安全及同步控制的有效途径,以及网络通信编程中的Socket类实现。掌握这些技术要点,对于进行高效、稳定、...

    Java多线程技术

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

    Java多线程技术精讲

    Java多线程技术是Java编程中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在现代计算机系统中,多线程是实现并发处理的关键技术,尤其在服务器端应用和高性能计算中不可或缺。 ...

    Java多线程技术及其在网络编程中的应用.caj

    Java多线程技术及其在网络编程中的应用.caj

    基于Java多线程技术的网络编程.pdf

    Java多线程技术在网络编程中的应用 Java多线程技术是Java语言中的一种强大功能,它使得Java在网络编程中被广泛采用于开发多用户具有并发服务器的网络聊天室等应用程序。Java的多线程机制可以方便地减少并发并行程序...

    Java多线程技术在物流仿真软件开发中的应用.pdf

    Java多线程技术在物流仿真软件开发中的应用 本文主要介绍了Java多线程技术在物流仿真软件开发中的应用,通过对Java多线程技术的介绍,将其应用于物流仿真软件的开发,实现物流过程中的分布交互式仿真。同时,采用...

    Java多线程技术实现矩阵乘积计算

    适合初学者使用,Java多线程技术实现矩阵乘积计算

    Java多线程技术(实验)

    ### Java多线程技术知识点详解 #### 一、实验目的 本实验旨在帮助学习者深入理解Java中的多线程编程技巧。具体目标包括: 1. **掌握Java中的多线程编程**:熟悉如何在Java中利用多线程来提高程序性能和响应能力。...

    基于Java多线程技术的测井仪三维仿真.pdf

    "基于Java多线程技术的测井仪三维仿真" 基于Java多线程技术的测井仪三维仿真.pdf文件的主要内容是关于基于Java多线程技术的测井仪三维仿真,实现了测井仪零件的装配动画和液体流动的模拟。下面是对该文件的知识点...

    Java多线程技术在WebGIS客户端小程序中的应用.pdf

    在深入探讨Java多线程技术在WebGIS客户端小程序中的应用之前,首先要了解WebGIS和Java多线程技术的基础知识。WebGIS是一种利用互联网技术来发布和处理地理信息的系统,它能够让用户通过浏览器访问地理位置数据和执行...

    java多线程技术论文

    java多线程技术论文—毕业设计论文说明书.

    基于Java多线程技术的项目进度并行仿真研究.pdf

    基于Java多线程技术的项目进度并行仿真研究 本研究论文主要介绍了基于Java多线程技术的项目进度并行仿真研究。该研究采用了系统仿真的思想,通过对项目中的工序进行建模,并通过计算得到工期的估计。研究结果表明,...

    java多线程技术整理

    Java多线程技术是Java编程中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过`Thread`类、实现`Runnable`接口或`Callable`接口以及使用`ExecutorService`...

    java多线程技术实现矩阵乘法计算

    不过,我将基于标题“java多线程技术实现矩阵乘法计算”来构建相关的知识点。 在Java中实现多线程进行矩阵乘法计算,主要是利用并发编程技术,这样可以显著提高大型矩阵运算的速度,尤其是当矩阵尺寸较大时,单线程...

    Java多线程技术的网络编程探讨.pdf

    本文将重点探讨Java多线程技术在复杂网络编程中的应用,包括多线程技术的概念、实现方式、启动方法以及一些控制线程行为的机制。 在计算机编程领域,多线程技术是一种允许在同一时间内执行多个指令的技术,这些指令...

    基于java多线程技术

    Java多线程技术是Java编程中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在本文中,我们将深入探讨多线程的概念、如何在Java中实现多线程以及相关的安全问题。 一、多线程概念 ...

    Java多线程技术详解

    Java多线程技术详解 在计算机编程中,多线程是一种重要的并发处理机制,它允许多个任务在同一个程序中并行执行。Java作为一种强健的面向对象的编程语言,提供了丰富的多线程支持,使得开发者能够高效地利用系统资源...

    基于Java多线程技术实现的粒子群优化算法

    ### 基于Java多线程技术实现的粒子群优化算法 #### 一、引言 粒子群优化算法(Particle Swarm Optimization, PSO)是一种基于群体智能的优化方法,最初由Eberhart和Kennedy在1995年提出。它模拟了鸟类觅食过程中的...

    Java多线程技术探讨.doc

    Java多线程技术是Java编程中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应速度。本文将深入探讨Java多线程的相关概念、创建与使用,以及特殊类型的线程如守护线程和线程组。 1. 线程...

Global site tag (gtag.js) - Google Analytics