关于进程、线程和多线程
- 进程:一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,包含一个或多个线程。
- 线程:进程中一个独立运行单位,不能独立于进程而存在,进程中的多个线程共享进程的内存。
- 多线程:
1. 在一个进程中有多个线程,同时执行(在线程之间实际上是轮换执行)。
2.能够最大限度去使用硬件资源,达到充分利用 CPU 的目的(如:android,ios)
3.进程中的线程数,不是越多越好,大概为1000个。(如:QQ、微信)即受内存大小等条件限制。
Java实现线程的方式
一般是两种:
- 线程类 Thread类(也是Runnable接口的子类)
线程的运行方法 run()
线程的启动方法 start()
其中,运行方法的用法为 public void run()
如果该线程是使用独立的Runnable运行对象构造的,则调用该Runnable对象的run方法;否则,该方法不执行任何操作并返回。Thread的子类应该重写该方法。
- 线程接口 Runnable接口
线程的运行方法 run()
用法为 void run()
使用实现接口Runnable的对象创建一个线程时,启动该线程将导致在独立执行的线程中调用对象的run方法。方法run的常规协定是,它可能执行任何所需的操作。
接下来实例说明,运用线程使一个球在页面上移动。 先构建一个页面,通过鼠标监视器在页面上画圆
public class BallFrame{
public static void main(String[] args){
BallFrame bf = new BallFrame();
bf.UN();
}
public void UN(){
JFrame jf = new JFrame("线程动画");
jf.setSize(600,600);
jf.setDefaultCloseOperation(3);
jf.setLocationRelativeTo(null);
jf.setResizable(false);
jf.setVisible(true);
BallListener bl = new BallListener(jf);
jf.addMouseListener(bl);
}
}
再构建BallListener类继承MouseAdapter,这样就不需要把无用MouseListener的方法重写进来
public class BallListener extends MouseAdapter{
public JFrame jf;
public Graphics g;
public BallListener(JFrame jf){
this.jf =jf;
}
public void mouseReleased(MouseEvent e){
g = jf.getGraphics();
int x = e.getX();
int y = e.getY();
Ball ball = new Ball(x, y, jf, g);
ball.start();
}
}
最后利用线程令小球运动起来
public class Ball extends Thread{
public int x,y;
public JFrame jf;
public Graphics g;
public Ball(int x, int y, JFrame jf, Graphics g ){
this.x=x;
this.y=y;
this.jf=jf;
this.g=g;
}
public void run(){
while(x+60<jf.getWidth()&&y+60<jf.getHeight()){
g.drawOval(x, y, 60, 60);
x+=20;
try {
Thread.sleep(100);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
}

本文详细解析了进程、线程及多线程的概念,阐述了它们在内存中的运行方式,以及如何在Java中实现多线程,包括通过继承Thread类和实现Runnable接口两种方式。并通过一个具体的实例,展示了如何利用线程实现页面上的球形动画。
2149

被折叠的 条评论
为什么被折叠?



