线程让程序拥有了并发执行的能力,所谓“并发执行”是指程序能够同时执行多个任务。注意是“同时”执行多个任务而不是按照某个“次序”执行多个任务,也就是说程序可以同时执行不同的代码。由于程序在启动后就会立即执行代码,所以一个程序至少会有一个线程,这个线程通常称为“主线程”,主线程是随着程序的启动而自动创建并且自动执行的,它的执行入口就是main方法,当主线程的代码完成后,程序也就随即终止了。
如果一个程序在运行后创建了多个线程,那么这个程序就可以同时执行多个任务,但实际上不一定是这样。如果计算机只有一个CPU的话,在同一时刻是不可能让一个CPU同时进行多个运算的,但是由于现在的CPU速度非常快,它只要在不同的线程之间快速切换的话,用户就会感觉到似乎是程序在“同时”执行多个任务。线程之间的切换是由JVM来调度的,我们基本上无法进行控制,也无须控制。
Java中的线程都是java.lang.Thread类的实例,我们创建一个新的线程对象,然后调用start()方法启动线程,当线程对象被执行时,会调用其中的run()方法,当run()方法中的代码执行完后,线程终止。很显然Thread类中的run()方法不会包含我们想要的代码,那么该怎样把代码写到run()方法中去呢?有两种方法:
- 扩展Thread类
- 实现Runnable接口
不管用哪一种方法,都需要重写(或实现)run()方法,把需要的代码写到里面去。使用第一种方法需要让Thread成为父类,这本身没有什么问题,不过如果要定义的类已经有了指定的父类的话,那么就只能使用第二种方法了。这两种方法的示例代码如下:
class MyThread extends Thread {
public void run() {
System.out.println("MyThread");
}
}
class MyRunnable implements Runnable {
public void run() {
System.out.println("MyRunnable");
}
}
定义好类后,实例化就很容易了,对于第一种方法,直接调用其构造函数就可以了,对于第二种方法就稍微麻烦一些了,不过也很容易,例如:
MyThread t1 = new MyThread();
MyRunnable r = new MyRunnable();
Thread t2 = new Thread(r);
在创建了线程实例后,调用start()方法就可以让线程启动了,例如:
t1.start();
t2.start();
完整代码如下:
public class ThreadIntro {
public static void main(String[] args) {
MyThread t1 = new MyThread();
MyRunnable r = new MyRunnable();
Thread t2 = new Thread(r);
t1.start();
t2.start();
System.out.println("main ends.");
}
}
这里除了t1和t2之外,还有一个主线程,因此总共是3个线程,其中t1和t2是在主线程里创建的,不过在启动这两个线程之后,三个线程就并发执行了,不过这三个线程的执行顺序是无法控制的,因为这是由JVM进行调度的。
先写到这儿吧,明天接着写。
分享到:
相关推荐
总结来说,"C#语言多线程初步理解"这个主题涵盖了线程创建、线程安全、线程同步以及在WinForm应用中的实践。通过深入学习和实践这些概念,开发者可以编写出更加高效和响应迅速的应用程序。在“WindowsForms...
理解它们的关系和交互方式,对于编写高效、稳定的多线程程序至关重要。在实际编程中,我们需要根据任务的特点和需求,合理地利用进程和线程,同时注意处理好并发和同步问题,以实现最优的系统性能。
在Unity引擎中,C#是主要的编程语言,用于创建游戏逻辑和其他交互式应用程序。本文将探讨如何在Unity中使用C#实现线程的基本概念...理解这些概念并适当应用它们,可以帮助你在Unity项目中实现高效且稳定的多线程代码。
### Ruby多线程编程初步入门 #### 一、引言 多线程编程是现代软件开发中的重要组成部分,尤其对于需要高效并发处理的任务而言更是如此。Ruby作为一种灵活且功能强大的编程语言,在支持多线程方面提供了丰富的工具...
### Windows多线程多任务设计初步 在现代操作系统中,多线程和多任务处理是提升软件性能和响应性的关键。Windows操作系统通过支持多线程和多任务,使得多个应用程序和进程能够并行运行,提高了系统的整体效率。下面...
在Linux环境下,`top`、`htop`命令可以初步查看线程,而`gdb`、`strace`、`jstack`等工具则能进行深度分析。Java开发者可以使用JDK自带的`jconsole`、`jvisualvm`或第三方工具如`VisualVM`进行Java应用的线程监控。 ...
总的来说,不使用MFC进行Windows多线程编程需要直接调用Windows API,理解并掌握`CreateThread`或`_beginthread`等函数的使用方法,以及线程同步和通信的相关概念。通过合理的多线程设计,可以显著提升程序的并发...
标题中的“一个初步的用VB写“多线程”程序的例子”表明这是一个关于使用Visual Basic (VB)编程语言实现多线程技术的示例项目。多线程是计算机编程中的一个重要概念,允许程序同时执行多个任务,从而提高效率和响应...
1. **线程同步基础**: - 在多线程环境下,当多个线程同时访问同一资源时,如果没有适当的同步机制,可能会导致数据不一致、死锁等问题。线程同步是解决这些问题的关键。 - Windows提供了多种同步对象,如`Mutex`...
在VB.Net编程中,多线程是一...通过以上介绍,你应该对VB.Net中的多线程有了初步的理解。在实际项目中,根据需求合理地运用多线程技术,可以提高程序的性能和用户体验。不断实践和学习,你将更加熟练地掌握多线程编程。
1. **线程基础**:在Java中,我们可以使用`Thread`类或者实现`Runnable`接口来创建线程。创建一个线程对象后,通过调用`start()`方法启动线程,它会自动调用`run()`方法执行线程的业务逻辑。 2. **蛇的移动线程**:...
进程和线程是操作系统中的基本概念,...尤其是在多线程编程中,对线程的监控至关重要,它可以帮助开发者理解程序的运行逻辑,找出并修复潜在的问题。总的来说,Process Explorer是一款不可或缺的系统诊断和优化工具。
举例来说,如果一个监控程序需要实时采集和处理数据,那么辅助线程可以负责数据的采集和初步处理工作,处理完毕的数据可以放入线程安全队列中,主线程再从队列中取出数据进行显示。在这个过程中,主线程可以通过...
通过对DirectShow的多线程视频采集系统的开发,我们可以理解到,流媒体技术、网络编程、多线程编程以及软件工程等多方面知识和技术的综合运用对于实现一个高效的视频采集系统至关重要。同时,通过文档中对过滤器和...
"VC多线程编程.CHM"可能包含有关在Windows环境下使用Visual C++进行多线程编程的信息,虽然与Linux环境不同,但理解不同的操作系统下的线程实现有助于跨平台开发。 另外,"第8章_Socket编程初步.ppt"可能包含关于...
在探讨Android的线程消息机制之前,我们可以通过一个生活中的例子来进行初步的理解。假设有一个隧道,隧道内部可以容纳多辆汽车通行,而这些汽车就像消息一样,按照先后顺序进入隧道,并依次离开。这种先进先出的...
本文将深入探讨多线程的基础知识,包括它的概念、使用场景、核心方法以及通过简单示例来帮助初学者理解多线程的实践操作。 1. 多线程概念: 多线程是指在一个应用程序中同时执行多个独立的执行路径,每个路径称为一...
附件为视频案例。主要对初学者展示了同步线程的认识 案例介绍了兔子与乌龟赛跑的同步线程,比较形象的介绍了大家对线程的初步理解
#### 三、Java多线程程序设计初步 ##### 1. 线程的创建 - **继承Thread类**: - 重写`run()`方法。 - **实现Runnable接口**: - 实现`run()`方法。 - 将`Runnable`对象传递给`Thread`构造函数。 ##### 2. 线程的...