java thread类 import_Java多线程Thread类的使用

前言:

多线程机制是JAVA语言又一重要特征,使用多线程技术可以使系统同时运行多个执行体,提高计算机资源的利用率和整个应用系统的性能。今天主要练习的是多线程机制、Thread类、以及线程的应用机制。

一问一答:

Q:为什么要用多线程?

A"通常,把操作系统的多个任务称为进程(Process),而程序中的多任务则称为线程。每个进程都拥有一组完整的属于自己的变量,而线程则共享这些数据。线程的优势在于创建和注销线程的开销比运行新的进程少得多,所以现在主流的操作系统都支持多线程。而且,和进程间的通信相比,线程间的通信要快得多,也方便得多。

创建线程:

创建线程第一种方法是继承线程类java.lang.Thread。相关的方法有:

1、run():该方法用于线程的执行。在线程启动后会调用该方法。你需要重载该方法,以便让线程做特定的工作。

2、start():该方法使得线程启动run()方法。

例:通过多线程实现球移动的动画:点击"Start"按钮,则从左上角生成一个球在界面移动并反弹;点击"Close"按钮则退出程序。

268499ae9417

效果图1.png代码如下:

import java.awt.;

import java.lang.;

import java.awt.event.;

import javax.swing.;

import java.util.*;

public class BallGame extends JFrame implements ActionListener

{

JButton jbtStart = new JButton("Start");

JButton jbtStop = new JButton("Stop");

MainPanel mp = new MainPanel();

public BallGame()

{

this.getContentPane().add(mp,BorderLayout.CENTER);

mp.setBackground(Color.white);

JPanel p=new JPanel();

p.add(jbtStart);

p.add(jbtStop);

this.getContentPane().add(p,BorderLayout.SOUTH);

jbtStart.addActionListener(this); //监听事件

jbtStop.addActionListener(this);

}

public static void main(String[] args)

{

BallGame bt = new BallGame();

bt.setSize(300,300);

bt.setVisible(true);

bt.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public void actionPerformed(ActionEvent e)

{

if(e.getSource()==jbtStart)

{

BallThread b=new BallThread(mp);

mp.balls.addElement(b);

b.start();

}

else

{

System.exit(0);

}

}

}

class MainPanel extends Panel

{

public Vector balls=new Vector();

public void paint(Graphics g)

{

for(int i=0;i

{

BallThread ball = (BallThread)balls.elementAt(i);

ball.draw();

}

}

}

class BallThread extends Thread

{

MainPanel mainPanel;

private static final int XSIZE=20;

private static final int YSIZE=20;

private int x=0;

private int y=0;

private int dx=2;

private int dy=2;

public BallThread(MainPanel b)

{

mainPanel=b;

}

public void draw()

{

Graphics g=mainPanel.getGraphics();

g.fillOval(x,y,XSIZE,YSIZE);

g.dispose();

}

public void move()

{

x+=dx;

y+=dy;

Dimension d=mainPanel.getSize();

if(x<0){x=0;dx=-dx;}

if(y<0){y=0;dy=-dy;}

if(x+XSIZE>=d.width ) {x=d.width -XSIZE;dx=-dx;}

if(y+YSIZE>=d.height ) {y=d.height -YSIZE;dy=-dy;}

mainPanel.repaint();

}

public void run()

{

try

{

draw();

while(true)

{

move();

sleep(30);

}

}catch(Exception e){ }

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值