Java理解多线程

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();}
    	   }	
	}

}

这两份代码均为在画图板上缓慢画一条线,未创建多线程时只能等第一条画完才会接着画第二条,而创建了多线程后能同时画多条线,这就是多线程的作用了。
若有错误,欢迎指正留言!!!

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北极,南极

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值