浅谈多线程
多线程即实现程序内部的多个任务的同时执行。
1.线程的定义:
每个运行的程序都是一个进程。一个进程中包含多个线程。所以线程也可以说是一个微小的进程。它是进程的再次细分。可以这么说,如果把进程比喻成一个大的执行任务,那个线程就是这个大任务中一个个细小的小任务。要执行一进程,必须一步步实现单个的线程。线程是在一个进程中独立的控制流,即程序内部的控制流。
2.单线程与多线程
单线程:只有一条线程的进程称为单线程。
多线程:有不止一个线程的进程称为多线程。一个进程内部不同的线程可以同时执行,所以多线程也叫并发线程。
3. 开启多线程的优点和缺点
优点:
(a)提高程序响应速度。使用线程可以把占据时间长的程序中的任务放到后台去处理。
(b) 充分利用系统资源,提高效率。使用线程可以减少CPU的内存消耗。CPU不需要等到这个任务结束后才去执行其他任务。而是在执行这个任务的同时,利用空闲时间与空间去实现其他任务。大大减少了时间消耗。
缺点:
(a)使用过多线程效率可能反而降低。这是因为操作系统需要在大量线程之间切换,切换所带来的时间消耗可能大于了使用线程所减少的时间消耗。
(b)可能消耗更多的内存空间。更多的线程也意味着需要更多的内存空间来执行进程。
但是,相比较而言,使用多线程的优势在大多数情况下远胜过劣势的。所以现在的项目开发中,多线程编程技术得到了广泛的应用。
4. 多线程的实现途径
Java语言提供了三种实现方式:
(a) 继承Thread类
(b)实现Runnable接口
(c) 使用Timer和TimerTask组合
下面将以继承Thread类来讲诉多进程的实现。
以下代码是以实现在画面上添加运动的小球为例:
Game类:
主要实现界面的初始化创建和创建线程对象
public class Game {
private JFrame jf;
public void showUI(){
jf = new JFrame();
jf.setTitle("运动小球");
jf.setSize(500,500);
jf.setDefaultCloseOperation(3);
jf.setLocationRelativeTo(null);
jf.setLayout(new FlowLayout());
JButton btn = new JButton("添加小球");
btn.addActionListener(listener);
//将按钮添加到面板上,防止小球经过面板时,按钮被擦除
JPanel jp = new JPanel();
jp.setPreferredSize(new Dimension(500,40));
jp.setLayout(new FlowLayout(FlowLayout.CENTER,0,0));
EmptyBorder border = new EmptyBorder(5, 5, 5, 5); //设置按钮间的间距
jp.add(btn);
jf.add(jp);
jf.setVisible(true);
}
//创建动作监听类
ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//创建一个线程对象
Ball t = new Ball(jf);
//启动线程,只能调用一个start方法
t.start();
}
};
public static void main(String[] args) {
Game g = new Game();
g.showUI();
}
}
Ball类:
创建一个类,继承Thread,以实现进程的创建。
//创建进程类
public class Ball extends Thread {
private JFrame jf;
private Graphics g;
//定义圆心的坐标
private int x,y;
//定义圆的半径
private int radius=30;
//水平方向的速度
private int vx = 3;
//垂直方向的速度
private int vy = 1;
public Ball (JFrame jf){
this.jf = jf;
g = jf.getGraphics();
}
//重写父类的run方法
public void run(){
while(true){
try {
//让线程休眠
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//只清除自己的小球
g.setColor(jf.getBackground());
g.fillOval(x-radius,y-radius, 2*radius, 2*radius);
//变化圆心坐标
x+=vx;
y+=vy;
//当小球越界时
if(x>=jf.getWidth()-radius){
vx=-Math.abs(vx);
}
if(x<=radius){
vx=Math.abs(vx);
}
if(y>=jf.getHeight()-radius){
vy=-Math.abs(vy);
}
if(y<=radius){
vy=Math.abs(vy);
}
//在圆心出画圆
g.setColor(Color.green);
g.fillOval(x-radius,y-radius, 2*radius, 2*radius);
}
}
}
总结:以继承Thread类来实现线程时,首先需要创建一个类来继承Thread,然后重写父类的run方法。在run方法中写入你希望运行进程时,程序需要出现的效果。当需要使用进程时,应该创建一个进程类的对象,用该对象调用start方法,那么此时程序自动执行进程对象中run方法中的代码。可创建多个进程对象,实现多个进程的同时运行。这个例子中,每一个运动的小球就是一个进程,添加多个小球,就是添加多个进程,多个小球可以同时运动,它们之前没有相互影响,不需要等一个小球运动完之后,才可以添加另一个小球,这便是多进程的实现。
相关推荐
【多线程】是计算机编程中的一个重要概念,它允许程序在同一时间内执行多个任务,从而提高了程序的执行效率。在Java中,多线程是通过创建并运行多个线程来实现的,每个线程代表着进程中的一条独立控制流。Java线程是...
"浅谈多线程中的锁的几种用法总结" 多线程编程中,锁机制是一种常见的同步机制,用于解决多线程之间的资源竞争问题。锁机制可以分为两种:互斥锁和读写锁。在 Java 中,ReentrantLock 和 ReentrantReadWriteLock 是...
"浅谈Java多线程编程" 从标题和描述可以看出,这篇文章的主题是讨论Java多线程编程的相关知识点。 多线程编程的概念 Java语言的一个重要特点是支持多线程机制,这使得Java程序可以支持多程序并发执行,从而提高...
【Java多线程编程】是Java开发中不可或缺的一部分,它允许程序同时执行多个任务,从而提高效率和响应速度。本文将深入探讨Java多线程的优缺点、创建方式以及线程安全与同步机制。 **一、多线程的优缺点** 1. **...
"浅谈Java的多线程机制" 本文主要讨论了Java语言中的多线程机制,旨在提高应用程序的性能和实时控制性能。 Java提供了多线程编程模型,使得在一个程序中可以同时执行多个小任务,从而最大限度地利用CPU资源。 首先...
浅谈JAVA语言的多线程技术 一、多线程技术的概述 JAVA语言作为一种面向对象的编程语言,它具有平台独立性、安全性、网络化、多线程、面向对象等特点。其线程机制在实践中广泛应用而受到编程者的极大关心。本文就...
【Linux下的多线程编程】 在Linux操作系统中,多线程编程是一种常见且重要的编程模型,它允许多个执行流(线程)在一个进程中同时运行,以提高程序的并发性和资源利用率。多线程在系统开发中扮演着关键角色,特别是...
在Java编程语言中,多线程是程序设计中的一个重要概念,尤其在开发高效能、响应迅速的应用时。本文将深入探讨Java中多线程的实现,帮助开发者理解如何利用这一特性来优化应用程序。 多线程是指在一个程序中同时运行...
在.NET框架中,多线程和并行计算是提高应用程序性能和响应能力的关键技术。本文将深入探讨这两个概念,以及如何在.NET环境下有效地利用它们。 首先,多线程是指一个程序中同时执行多个独立的线程,每个线程都有自己...
多线程编程是现代软件开发中的一个重要概念,特别是在多核处理器系统中,它能够充分利用硬件资源,提高程序的执行效率。本文主要探讨Linux和Windows操作系统下的多线程编程的异同。 首先,多线程编程的核心在于实现...
在.NET框架中,多线程和并行计算是提高应用程序性能和响应能力的关键技术。本文将深入探讨这两个概念,以及如何在.NET环境下有效地利用它们。 首先,多线程是指一个程序中存在多个执行流,每个执行流都有自己的独立...
在Java开发中,多线程技术是一项重要的编程技能,它允许同时运行两个或多个部分,这些部分称为线程,每个线程可以处理不同的任务。这不仅能够提高程序的执行效率,还能改善用户体验,因为多线程可以实现程序的异步...
多线程编程是一种在单个进程中同时执行多个并发任务的技术,它可以提高程序的效率和响应性,尤其是在处理大型计算任务或需要并行处理的场景中。本文将对比Linux和Windows平台上的多线程编程,探讨它们的异同点。 ...
### .NET下的多线程与并行计算:深入解析与应用 #### 一、引言 随着计算机硬件的发展,特别是多核处理器的普及,多线程和并行计算已成为现代软件开发不可或缺的一部分。本文旨在探讨.NET框架下多线程与并行计算的...