Java线程简单总结
线程是Java程序中程序执行的基本模型,Java和其API为创建和管理线程提供了丰富的特征集。所有的Java程序至少由一个控制线程组成,即使只有main()函数的简单Java程序也是在JVM中作为一个线程运行的。
在Java中有两种创建线程的技术,一种创建一个新的类,从Thread类派生,并重载其run()函数。另一种更常用的方法是定义一个实现Runnable接口的类。Runnable接口定义如下:
public interface Runnable{public abstract void run();
}
当一个类执行Runnable时,必须定义run()函数。实现run()函数的代码被作为一个独立的线程执行。
以下是计算非负整数累加和的多线程例子。
class Sum{private int sum;public int getSum(){return sum;}public void setSum(int value){this.sum = sum;}
}class Summation implements Runnable{private int upper;private Sum sumValue;public Summation(int upper, Sum sumValue){this.upper = upper;this.sumValue = sumValue;}public void run(){int sum = 0;for(int i = 0; i<=upper; i++)sum += i;sumValue.setSum(sum);}
}public class Driver{public static void main(String[] args){if(arg.length > 0){if(Integer.parseInt(args[0]) < 0)System.err.println(args[0] + "must be >= 0");}else{//创建可共享的对象Sum sum = new Sum();int upper = Integer.parseInt(args[0]);Thread thread = new Thread(new Summation(upper, sum));thread.start();try{thread.join();System.out.println("The sum of " + upper + "is " + sum.getSum());}catch(InterruptedException ie){}}}else{System.out.println("Usage:Summation<integer value>");}}
Summation类实现了Runnable接口,通过创建一个Thread类的对象实例和传递Runnable对象的结构来创建线程。
注意,创建Thread对象并不会创建一个新的线程,实际上是用start()函数来创建新线程,为新的对象调用start()函数需要做以下两件事:
在JVM中分配内存并初始化新的线程
调用run()函数,使线程适合在JVM中运行
注意,不直接调用run()函数,而是调用start()函数,然后再它再调用run()函数
在上述例子程序中,通过JVM调用两个线程,第一个是父线程,在main()函数中开始执行。第二个线程在调用Thread对象的start()函数时创建,这个子线程在Summation类的run()函数中开始执行。在输出累加和的值之后,当此线程从run()函数中退出后线程终止。
在Win32和Pthread 中线程间共享数据很方便,因为共享数据被简单地声明为全局数据。而Java是纯面向对象的语言,没有全局数据的概念,在Java中如果两个或更多的线程需要共享数据,需要通过向相应的线程传递对共享对象的引用来实现。通过getSum()和setSum()函数引用共享对象。不使用java.lang.Integer对象,而设计一个新的Sum对象,是因为java.lang.Integer类是不可变的,一旦被赋予值,就不可改变。
Java线程简单总结相关推荐
- 一个简单的例子看java线程机制
一个简单的例子看java线程机制 作者: zyf0808 发表日期: 2006-03-26 11:20 文章属性: 原创 复制链接 import java.util.*; public class T ...
- java扫描局域网中可用ip_使用java线程扫描局域网ip简单方案
package com.cjh.thread; import java.io.BufferedReader; import java.io.IOException; import java.io.In ...
- Java 线程的6种状态(简单介绍)
关于Java线程的状态网上的说法不一,有的说是6种状态,有的说是5中状态,索性就查看了一下Java源码.Thread类里面有一个枚举类,如下: public enum State {NEW,RUNNA ...
- 求一个简单的java线程代码,Java线程代码的实现方法
1.继承Thread 声明Thread的子类 运行thread子类的方法 2.创建Thread的匿名子类 3.实现Runnable接口 声明 运行 4.创建实现Runnable接口的匿名类 5.线程名 ...
- java线程安全总结 - 1 (转载)
原文地址:http://www.jameswxx.com/java/java%E7%BA%BF%E7%A8%8B%E5%AE%89%E5%85%A8%E6%80%BB%E7%BB%93/ 最近想将ja ...
- java线程钥匙_Java多线程并发编程/锁的理解
一.前言 最近项目遇到多线程并发的情景(并发抢单&恢复库存并行),代码在正常情况下运行没有什么问题,在高并发压测下会出现:库存超发/总库存与sku库存对不上等各种问题. 在运用了 限流/加锁等 ...
- 面试必问---Java线程池8大拒绝策略
前言 谈到java的线程池最熟悉的莫过于ExecutorService接口了,jdk1.5新增的java.util.concurrent包下的这个api,大大的简化了多线程代码的开发.而不论你用Fix ...
- java线程的优先级是数字越大优先级越高_《深入理解Java虚拟机》5分钟速成:12章(Java内存模型与线程)...
第12章 Java内存模型与线程 前言: 1.物理机如何处理并发问题? 2.什么是Java内存模型? 3.原子性.可见性.有序性的具体含义和应用实现? 4.volatile 关键字特性? 5.基于vo ...
- java 线程组作用_浅析Java中线程组(ThreadGroup类)
一.概念 Java中使用ThreadGroup类来代表线程组,表示一组线程的集合,可以对一批线程和线程组进行管理.可以把线程归属到某一个线程组中,线程组中可以有线程对象,也可以有线程组,组中还可以有线 ...
最新文章
- python 一次编辑
- 还说不会深度学习,三招帮你“炼丹”成功
- caffe.pb.h丢失问题:
- 为机场按上一双“慧眼”消灭飞机的“黑色十分钟”
- activiti 7中文文档_Python3.7中文官方文档来袭...
- Python测试入门
- 拓端tecdat|R语言连续时间马尔可夫链模拟案例 Markov Chains
- win10设置HTML桌面背景,Win10系统直接将视频设置为桌面背景的方法
- CSS-fishc学习笔记
- Flask留言板Demo
- 如何用abaqus建造8号槽钢并分析槽钢的受力
- Node-red初级入门
- 参加了feedsky的博客大赛
- 如何爬取B站视频的封面图片
- 基于SSM实现的儿童疫苗信息管理系统设计与实现 毕业设计-附源码311930
- java类的构造方法编程训练—买可乐
- 监督学习、无监督学习、强化学习的区别
- 微信小程序:父子组件的通信
- 又一巨头从Java迁移到Kotlin:关键应用全部开始切换、安卓代码库超过千万行Kotlin代码
- 秒懂所有USB接口类型,USB接口大全
热门文章
- 计算机网络期中考察方案,计算机网络期中考试题 b卷_ans.docx
- WIN2008 R2 Active Directory 之一 部署企业中第一台Windows Ser
- IIS 上传文件大小配置步骤(默认200K)
- apache在win2003下的安全设置
- 练手WPF(三)——扫雷小游戏的简易实现(中)
- 第十八篇:java操作Excel要处理和分辨的几个概念
- PYTHON_DACORATOR
- UVA12299 线段树水水水,但别乱开空间= =
- 【IT笔试面试题整理】字符串的组合
- Paired Joint Coordinates