如同程序和进程的区别,要掌握多线程编程,第一要弄清的问题是:线程对象和线程的区别.
线程对象是可以产生线程的对象.比如在java平台中Thread对象,Runnable对象.
线程,是指正在执行的一个指令序列.在java平台上是指从一个线程对象的start()开始.
运行run方法体中的那一段相对独立的过程.
鉴于作者的水平,无法用更确切的词汇来描述它们的定义.但这两个有本质区别的概念请初
学者细细体会,随着介绍的深入和例程分析的增加,就会慢慢明白它们所代表的真实含义.
天下难事必始于易,天下大事必始于细.
让我们先从最简单的"单线程"来入手.(1)带引号说明只是相对而言的单线程.(2)基于java
class BeginClass{
public static void main(String[] args){
for(int i=0;i<100;i++)
System.out.println("Hello,World!");
}
}
如果我们成功编译了该java文件,然后在命令行上敲入:
java BeginClass
现在发生了什么呢?每一个java程序员,从他开始学习java的第一分钟里都会接触到这个问
题,但是,你知道它到底发生发什么?
JVM进程被启动,在同一个JVM进程中,有且只有一个进程,就是它自己.然后在这个JVM环境中,
所有程序的运行都是以线程来运行.JVM最先会产生一个主线程,由它来运行指定程序的入口点.在这个
程序中,就是主线程从main方法开始运行.当main方法结束后,主线程运行完成.JVM进程也随之退出.
我们看到的是一个主线程在运行main方法,这样的只有一个线程执行程序逻辑的流程我们称
之为单线程.这是JVM提供给我们的单线程环境,事实上,JVM底层还至少有垃圾回收这样的后台线程以
及其它非java线程,但这些线程结我们而言不可访问,我们只认为它是单线程的.
主线程是JVM自己启动的,在这里它不是从线程对象产生的.在这个线程中,它运行了main方法
这个指令序列.理解它,但它没有更多可以研究的内容.
[接触多线程]
class MyThread extends Thread{
public void run(){
System.out.println("Thread say:Hello,World!");
}
}
public class MoreThreads{
public static void main(String[] args){
new MyThread();
new MyThread().start();
System.out.println("Main say:Hello,World");
}
}
执行这个程序,main方法第一行产生了一个线程对象,但并没有线程启动.
main方法第二行产生了一个线程对象,并启动了一个线程.
main方法第三行,产生并启动一个线程后,主线程自己也继续执行其它语句.
我们先不研究Thread对象的具体内容,稍微来回想一下上面的两个概念,线程对象和线程.
在JAVA中,线程对象是JVM产生的一个普通的Object子类.
而线程是CPU分配给这个对象的一个运行过程.我们说的这个线程在干什么,不是说一个线
程对象在干什么,而是这个运行过程在干什么.如果一时想不明白,不要急,但你要记得它们不是一回
事就行了.
分享到:
相关推荐
随着现代处理器的生产工艺从提升...《Java多线程编程实战指南(核心篇)》适合有一定Java语言基础的读者作为入门多线程编程之用,也适合有一定多线程编程经验的读者作为重新梳理知识结构以提升认知层次和参考之用。
首先我将在本篇文章的开始向大家介绍多线程的有关概念以及多线程编程的基础知识;在接下来的文章中,我将逐一讲述。NET平台上多线程编程的知识,诸如System.Threading命名空间的重要类以及方法,并就一些例子程序来作...
java多线程编程指南核心篇,各人觉得并发编程的艺术看起来更枯燥,还是实战带感,当然,有基础的话更容易些
随着CPU 多核时代的到来,多线程编程在充分利用计算资源、提高软件服务质量方面扮演了越来越重要的角色。...《Java多线程编程实战指南(设计模式篇)》适合有一定Java 多线程编程基础、经验的读者。
与此相反,像java所使用的这种并发系统会共享内存或I/O这样的资源,因此编程编写多线程程序最基本的困难在于,协调不同线程驱动的任务之间这些资源的使用,以便使得这些资源不会同时被多个任务访问。
WinForm多线程编程篇 * 我的多线程WinForm程序老是抛出InvalidOperationException ,怎么解决? * Invoke,BeginInvoke干什么用的,内部是怎么实现的 * 每个线程都有消息队列吗? * 为什么Winform不允许跨线程...
"深入浅出Win32多线程程序设计" Win32 多线程程序设计是现代操作系统的关键组成部分。随着操作系统的发展,从单进程单线程到多进程多线程是必然的趋势。Win32 操作系统可以实现多任务控制,如同时听音乐、编程和...
首先我将在本篇文章的开始向大家介绍多线程的有关概念以及多线程编程的基础知识;在接下来的文章中,我将逐一讲述.NET平台上多线程编程的知识,诸如System.Threading命名空间的重要类以及方法,并就一些例子程序来作说明...
多线程编程是将任务分成多个并发的子任务,从而提高程序的效率。 §9.2 Java 线程的创建 Java 提供了两种方式来创建线程:继承 Thread 类的方法和实现 Runnable 接口的方法。 1. 继承 Thread 类的方法 通过实现 ...
WinForm多线程编程篇 • 我的多线程WinForm程序老是抛出InvalidOperationException ,怎么解决? • Invoke,BeginInvoke干什么用的,内部是怎么实现的 • 每个线程都有消息队列吗? • 为什么Winform不允许跨...
与此相反,像java所使用的这种并发系统会共享内存或I/O这样的资源,因此编程编写多线程程序最基本的困难在于,协调不同线程驱动的任务之间这些资源的使用,以便使得这些资源不会同时被多个任务访问。
java_多线程开发 分为: 多线程编程——基础篇 多线程编程——实战篇
C++多线程编程基础知识 本篇文章将详细介绍C++中多线程编程的基础知识,涵盖多线程的创建、线程之间的通信、线程加锁和线程解锁等方面的知识点。 一、多线程的创建 在C++中,使用std::thread类来创建线程。线程的...
下篇为Python编程进阶篇,主要介绍了Python编程的高级知识和技能,包括面向对象编程、文件操作和异常处理、网络编程和多线程编程等。 Python编程的基础知识包括: 1. Python的安装和配置:Python可以在Windows、...
《c#网络编程高级篇之网页游戏辅助程序设计》涉及的领域包括多线程编程技术、socket套接字编程、tcp协议编程、http协议编程、远程控制技术、木马技术、模拟键盘和鼠标技术、网页游戏辅助程序设计技术等。...
WinForm多线程编程篇 • 我的多线程WinForm程序老是抛出InvalidOperationException ,怎么解决? • Invoke,BeginInvoke干什么用的,内部是怎么实现的 • 每个线程都有消息队列吗? • 为什么Winform不允许跨...
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)...进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。
python 零基础学习篇
C++是一种强大且广泛使用的编程语言,用于开发各种应用程序,从系统级应用到图形用户界面。...如果您想更深入地学习C++,可以探索面向对象编程、模板编程、多线程编程等更高级主题,以充分利用这门强大的编程语言。
读书笔记-Java并发编程实战-基础篇