[size=large]
1 了解程序、进程、线程的概念
进程是指运行中的应用程序,每一个进程都有自己独立的内存空间。
线程是进程内部单一的一个顺序控制流
基于进程的特点是允许计算机同时运行两个或更多的程序
基于线程的多任务处理环境中,线程是最小的处理单位
基于线程所需的开销更少
在多任务中,各个进程需要分配它们自己独立的地址空间
多个线程可共享相同的地址空间并且共同分享同一个进程
进程间调用涉及的开销比线程间通信多
线程间的切换成本比进程间切换成本低
简而言之,一个程序至少有一个进程,一个进程至少有一个线程.
2 主线程:
在Java程序启动时,一个线程立刻运行,该线程通常称为程序的主线程。
主线程的重要性体现在两个方面:
它是产生其他子线程的线程。
通常它必须最后完成执行,因为它执行各种关闭动作。
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() 等待线程消亡;
4、 线程同步:
什么是同步:当两个或多个线程需要访问同一资源时,它们需要以某种顺序来确保该资源某一时刻只能被一个线程使用的方式称为同步。
java如何实现同步:
两种方式实现同步:
使用同步方法:
synchronized void methodA() { }
使用同步块:
synchronized(object) {
//要同步的语句
}
[/size]
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 设计模式
2012-06-11 19:34 8561 单例模式 Singleton模式主要作 ... -
java JDBC编程
2012-06-11 19:30 15251:JDBC Java DataBase Connectiv ... -
java网络编程socket
2012-06-09 18:03 1464网络通信基本概念 协议:协议是一组在网络上发送信息的规则 ... -
java io流编程
2012-06-09 17:11 5829一、java.io.File 1、绝对路径和相对路径 F ... -
java swing之JTable和JList
2012-06-09 15:16 223771、JTable JTable构造方法: JTable(Tab ... -
java swing基础与事件处理
2012-06-09 15:02 14548一、swing基础 1、平台无 ... -
eclipse常用快捷键
2012-06-08 15:39 0eclipse常用快捷键 Eclipse ... -
java集合框架
2012-06-08 15:33 15451、java集合架构支持3种类型的集合:规则集(Set),线性 ... -
java异常处理
2012-06-08 13:23 974一、Java异常的基础知识 ... -
java系统常用类
2012-06-08 13:07 13081、Object类 构造方法: Object() 常用方法: ... -
java三大特性
2012-06-08 12:44 1329java三大特性: 封装:隐藏对象的属性和实现细节,仅对外公开 ... -
java基础语法
2012-06-08 12:16 10041、环境变量 (1)JAVA_HOME:指明JDK安装路径,就 ...
相关推荐
### Java多线程技术及其在网络编程中的应用 #### 引言 Java作为一种强大的面向对象的编程语言,由SUN公司开发,旨在支持分布式计算。它不仅具备简单的语法、面向对象的特点,还拥有跨平台的特性、高可靠性和安全性...
总结来说,Java多线程技术在网络通信系统中的应用包括了线程间通信的原理、多线程实现网络通信的原理、线程安全及同步控制的有效途径,以及网络通信编程中的Socket类实现。掌握这些技术要点,对于进行高效、稳定、...
Java多线程技术是Java编程语言中的一个重要部分,它允许程序员创建多个线程来执行多个任务,这样可以有效地利用系统资源,提高程序的执行效率。在Java中,多线程的实现主要有两种方式:一种是继承Thread类,另一种是...
Java多线程技术是Java编程中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在现代计算机系统中,多线程是实现并发处理的关键技术,尤其在服务器端应用和高性能计算中不可或缺。 ...
Java多线程技术及其在网络编程中的应用.caj
Java多线程技术在网络编程中的应用 Java多线程技术是Java语言中的一种强大功能,它使得Java在网络编程中被广泛采用于开发多用户具有并发服务器的网络聊天室等应用程序。Java的多线程机制可以方便地减少并发并行程序...
Java多线程技术在物流仿真软件开发中的应用 本文主要介绍了Java多线程技术在物流仿真软件开发中的应用,通过对Java多线程技术的介绍,将其应用于物流仿真软件的开发,实现物流过程中的分布交互式仿真。同时,采用...
适合初学者使用,Java多线程技术实现矩阵乘积计算
### Java多线程技术知识点详解 #### 一、实验目的 本实验旨在帮助学习者深入理解Java中的多线程编程技巧。具体目标包括: 1. **掌握Java中的多线程编程**:熟悉如何在Java中利用多线程来提高程序性能和响应能力。...
"基于Java多线程技术的测井仪三维仿真" 基于Java多线程技术的测井仪三维仿真.pdf文件的主要内容是关于基于Java多线程技术的测井仪三维仿真,实现了测井仪零件的装配动画和液体流动的模拟。下面是对该文件的知识点...
在深入探讨Java多线程技术在WebGIS客户端小程序中的应用之前,首先要了解WebGIS和Java多线程技术的基础知识。WebGIS是一种利用互联网技术来发布和处理地理信息的系统,它能够让用户通过浏览器访问地理位置数据和执行...
java多线程技术论文—毕业设计论文说明书.
基于Java多线程技术的项目进度并行仿真研究 本研究论文主要介绍了基于Java多线程技术的项目进度并行仿真研究。该研究采用了系统仿真的思想,通过对项目中的工序进行建模,并通过计算得到工期的估计。研究结果表明,...
Java多线程技术是Java编程中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过`Thread`类、实现`Runnable`接口或`Callable`接口以及使用`ExecutorService`...
不过,我将基于标题“java多线程技术实现矩阵乘法计算”来构建相关的知识点。 在Java中实现多线程进行矩阵乘法计算,主要是利用并发编程技术,这样可以显著提高大型矩阵运算的速度,尤其是当矩阵尺寸较大时,单线程...
本文将重点探讨Java多线程技术在复杂网络编程中的应用,包括多线程技术的概念、实现方式、启动方法以及一些控制线程行为的机制。 在计算机编程领域,多线程技术是一种允许在同一时间内执行多个指令的技术,这些指令...
Java多线程技术是Java编程中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在本文中,我们将深入探讨多线程的概念、如何在Java中实现多线程以及相关的安全问题。 一、多线程概念 ...
Java多线程技术详解 在计算机编程中,多线程是一种重要的并发处理机制,它允许多个任务在同一个程序中并行执行。Java作为一种强健的面向对象的编程语言,提供了丰富的多线程支持,使得开发者能够高效地利用系统资源...
### 基于Java多线程技术实现的粒子群优化算法 #### 一、引言 粒子群优化算法(Particle Swarm Optimization, PSO)是一种基于群体智能的优化方法,最初由Eberhart和Kennedy在1995年提出。它模拟了鸟类觅食过程中的...
Java多线程技术是Java编程中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应速度。本文将深入探讨Java多线程的相关概念、创建与使用,以及特殊类型的线程如守护线程和线程组。 1. 线程...