Java多线程
- 什么是多线程:
经常会有人问多线程是什么东西?如果把你看做一个应用程序,多线程就好像你可以边吃饭边看电视边听歌,也就是可以同时做多件事。
多线程就是你在程序中可以执行的多个任务,想要了解多线程是什么,我们先了解JAVA程序的运行原理(Java命令启动Java虚拟机,启动JVM,启动一个应用程序,也就启动了一个进程,该进程会自动启动一个主线程,主线程会调用main方法),所以我们可以知道main方法运行的程序是单线程的(不添加多线程的话) - 如何实现多线程?
通过继承Thread类实现
步骤:
1.继承Thread类创建多线程
2.重写run方法
3.调用Thread类的start()方法
话不多说 ,代码理解(可直接复制粘贴,注意包名和创建的类的类名用自己的)
未创建多线程时:
main代码:
package abc;
import java.awt.Graphics;
import javax.swing.JFrame;
public class test extends JFrame {
public void UI() {
this.setTitle("陈沅666");
this.setSize(500, 500);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
//获取画笔
Graphics g=this.getGraphics();
//创建监听器
testListener dl=new testListener(g);
this.addMouseListener(dl);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
test test=new test();
test.UI();
}
}
监听器Listener代码
package abc;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class testListener implements MouseListener {
Graphics g;
int x,y;
//构造器
public testListener(Graphics g) {
this.g=g;
}
public void mouseClicked(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {
x=e.getX();
y=e.getY();
System.out.println("初始点坐标:"+x+","+y);
//画线
for(int i=0;i<400;i++) {
g.fillOval(x+i, y, 20, 20);
//画一次睡一下
try {
Thread.sleep(40);
}catch(Exception ef) {
ef.getStackTrace();}
}
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
}
创建多线程后:
main代码不变
Listener代码
package abc;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class testListener implements MouseListener {
Graphics g;
int x,y;
//构造器
public testListener(Graphics g) {
this.g=g;
}
public void mouseClicked(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {
x=e.getX();
y=e.getY();
System.out.println("初始点坐标:"+x+","+y);
//创建testThread
testThread et = new testThread(x,y,g);
//调用start方法
et.start();
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
}
Thread代码
package abc;
import java.awt.Graphics;
public class testThread extends Thread{
int x,y;
Graphics g;
//构造器
public testThread(int x,int y,Graphics g) {
this.x=x;
this.y=y;
this.g=g;
}
public void run() {
//画线
for(int i=0;i<400;i++) {
g.fillOval(x+i, y, 20, 20);
//画一次睡一下
try {
Thread.sleep(40);
}catch(Exception ef) {
ef.getStackTrace();}
}
}
}
这两份代码均为在画图板上缓慢画一条线,未创建多线程时只能等第一条画完才会接着画第二条,而创建了多线程后能同时画多条线,这就是多线程的作用了。
若有错误,欢迎指正留言!!!