线程是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线程简单总结相关推荐

  1. 一个简单的例子看java线程机制

    一个简单的例子看java线程机制 作者: zyf0808 发表日期: 2006-03-26 11:20 文章属性: 原创 复制链接 import java.util.*; public class T ...

  2. java扫描局域网中可用ip_使用java线程扫描局域网ip简单方案

    package com.cjh.thread; import java.io.BufferedReader; import java.io.IOException; import java.io.In ...

  3. Java 线程的6种状态(简单介绍)

    关于Java线程的状态网上的说法不一,有的说是6种状态,有的说是5中状态,索性就查看了一下Java源码.Thread类里面有一个枚举类,如下: public enum State {NEW,RUNNA ...

  4. 求一个简单的java线程代码,Java线程代码的实现方法

    1.继承Thread 声明Thread的子类 运行thread子类的方法 2.创建Thread的匿名子类 3.实现Runnable接口 声明 运行 4.创建实现Runnable接口的匿名类 5.线程名 ...

  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 ...

  6. java线程钥匙_Java多线程并发编程/锁的理解

    一.前言 最近项目遇到多线程并发的情景(并发抢单&恢复库存并行),代码在正常情况下运行没有什么问题,在高并发压测下会出现:库存超发/总库存与sku库存对不上等各种问题. 在运用了 限流/加锁等 ...

  7. 面试必问---Java线程池8大拒绝策略

    前言 谈到java的线程池最熟悉的莫过于ExecutorService接口了,jdk1.5新增的java.util.concurrent包下的这个api,大大的简化了多线程代码的开发.而不论你用Fix ...

  8. java线程的优先级是数字越大优先级越高_《深入理解Java虚拟机》5分钟速成:12章(Java内存模型与线程)...

    第12章 Java内存模型与线程 前言: 1.物理机如何处理并发问题? 2.什么是Java内存模型? 3.原子性.可见性.有序性的具体含义和应用实现? 4.volatile 关键字特性? 5.基于vo ...

  9. java 线程组作用_浅析Java中线程组(ThreadGroup类)

    一.概念 Java中使用ThreadGroup类来代表线程组,表示一组线程的集合,可以对一批线程和线程组进行管理.可以把线程归属到某一个线程组中,线程组中可以有线程对象,也可以有线程组,组中还可以有线 ...

最新文章

  1. python 一次编辑
  2. 还说不会深度学习,三招帮你“炼丹”成功
  3. caffe.pb.h丢失问题:
  4. 为机场按上一双“慧眼”消灭飞机的“黑色十分钟”
  5. activiti 7中文文档_Python3.7中文官方文档来袭...
  6. Python测试入门
  7. 拓端tecdat|R语言连续时间马尔可夫链模拟案例 Markov Chains
  8. win10设置HTML桌面背景,Win10系统直接将视频设置为桌面背景的方法
  9. CSS-fishc学习笔记
  10. Flask留言板Demo
  11. 如何用abaqus建造8号槽钢并分析槽钢的受力
  12. Node-red初级入门
  13. 参加了feedsky的博客大赛
  14. 如何爬取B站视频的封面图片
  15. 基于SSM实现的儿童疫苗信息管理系统设计与实现 毕业设计-附源码311930
  16. java类的构造方法编程训练—买可乐
  17. 监督学习、无监督学习、强化学习的区别
  18. 微信小程序:父子组件的通信
  19. 又一巨头从Java迁移到Kotlin:关键应用全部开始切换、安卓代码库超过千万行Kotlin代码
  20. 秒懂所有USB接口类型,USB接口大全

热门文章

  1. 计算机网络期中考察方案,计算机网络期中考试题 b卷_ans.docx
  2. WIN2008 R2 Active Directory 之一 部署企业中第一台Windows Ser
  3. IIS 上传文件大小配置步骤(默认200K)
  4. apache在win2003下的安全设置
  5. 练手WPF(三)——扫雷小游戏的简易实现(中)
  6. 第十八篇:java操作Excel要处理和分辨的几个概念
  7. PYTHON_DACORATOR
  8. UVA12299 线段树水水水,但别乱开空间= =
  9. 【IT笔试面试题整理】字符串的组合
  10. Paired Joint Coordinates