Java多线程Thread类的使用

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

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

创建线程:
创建线程第一种方法是继承线程类java.lang.Thread。相关的方法有:
1、run():该方法用于线程的执行。在线程启动后会调用该方法。你需要重载该方法,以便让线程做特定的工作。
2、start():该方法使得线程启动run()方法。

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

效果图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<balls.size();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){   }
}

}

关于多线程的练习题及源码下载地址:http://pan.baidu.com/s/1bo60JGb 密码: 3mma

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 2,482评论 1 15
  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 2,986评论 1 18
  • 小编费力收集:给你想要的面试集合 1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JA...
    八爷君阅读 4,650评论 1 114
  • 起飞,降落。 如果人生的每一站,都像航班那么明确,知道去哪里,知道几点起飞,知道何时降落,那么很多人会通透很多。 ...
    周洋_图乐园阅读 356评论 0 7
  • 回顾2016,往事历历在目。 很多的艰辛,很多的困难,很多的危机,都在这一年遇见。 也正因为这些困难和艰辛,201...
    厦门厨留香创始人晓凡阅读 604评论 0 0