这是我初步开始写关于自己的学习过程的博客,希望在这个过程中能找到自己的问题,同时也欢迎看到我的博客的有缘人,多指正文章的不足,这样的话,自己会在编码记忆中,体会更深!!!
刚刚学习JAVA多线程,以下是一个简单实验
实验一、多线程打印数字
//类R实现接口
class R implementsRunnable{
privateint x = 0;
publicvoid run(){
System.out.println(++x);
}
}
//类MyThread继承Thread
public classMyThread extends Thread {
public int x = 0;
public void run(){
System.out.println(++x);
}
}
//测试类中对类MyThread和类R
public class Test {
public static void main(String[] args) throwsException{
for(int i=0;i<10;i++){
Thread t = new MyThread();
t.start();
}
Thread.sleep(1);//让上面的线程运行完成
R r = new R();
for(int i=0;i<10;i++){
Thread t = new Thread(r);
t.start();
}
}
}
程序执行过程
程序执行分析:在类test中
for(inti=0;i<10;i++)
{ Thread t = new MyThread();
t.start();
}
输出了10个1,因为在for()循环中,每次都实例一个新的对象,其中的私有变量都是从0开始,故打印十个1;
Thread.sleep(1);//让上面的线程运行完成
R r = new R(); //实例化带Runable接口的类R
for(int i=0;i<10;i++){
Thread t = new Thread(r);//以类R的对象作为参数 实例化Thread 的对象,此时的程序执行中会一直对变量加一
t.start();
}
实验二、多线程显示小球
/**********************************************BallComponent.java********************************************************/
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.nio.ByteOrder;
import java.util.ArrayList;
import javax.swing.JPanel;
import org.omg.CORBA.PRIVATE_MEMBER;
public class BallComponent extends JPanel {
private ArrayList<Ball> balls =new ArrayList<Ball>();
public void add(Ball b) {
balls.add(b);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
for(Ball b:balls){
g2.fill(b.getShape());
}
}
import java.awt.Rectangle;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import org.omg.CORBA.Bounds;
public class Ball {
private static final int XSIZE=15;
private static final int YSIZE=15;
private double x=1;
private double y=1;
private double dx= 1;
private double dy= 3;
public void move(Rectangle2D bounds) {
x+=dx;
y+=dy;
if(x<bounds.getMinX())
{
x=bounds.getMinX();
dx=-dx;
}
if(x+XSIZE>=bounds.getMaxX())
{
x=bounds.getMaxX()-XSIZE;
dx=-dx;
}
if(y<bounds.getMinY())
{
y=bounds.getMinY();
dy=-dy;
}
if(y+YSIZE>=bounds.getMaxY())
{
y=bounds.getMaxY()-YSIZE;
dy=-dy;
}
}
public Ellipse2D getShape() {
return new Ellipse2D.Double(x,y,XSIZE,YSIZE);
}
/**********************************************Bounce.java*******************************************************************/
package com;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Event;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.util.concurrent.Delayed;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Bounce {
public static void main(String[]args){
EventQueue.invokeLater(new Runnable()
{
public void run() {
JFrame frame=new BounceFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
class BounceFrame extends JFrame{
private BallComponent comp;
public static final int DEFAULT_WIDTH=450;
public static final int DEFAULT_HEIGHT=450;
public static final int STEPS=1000;
public static final int DELAY=3;
public BounceFrame() {
// TODO Auto-generated constructor stub
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
setTitle("Bounce");
comp =new BallComponent();
add(comp,BorderLayout.CENTER);
JPanel buttonPanel =new JPanel();
addButton(buttonPanel,"Start",new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
addBall();
}
});
addButton(buttonPanel,"Close",new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
});
add(buttonPanel,BorderLayout.SOUTH);
}
public void addButton(Container c,String title,ActionListener listener) {
JButton button =new JButton(title);
c.add(button);
button.addActionListener(listener);
}
public void addBall(){
try {
Ball ball = new Ball();
comp.add(ball);
for(int i=1;i<=STEPS;i++){
ball.move(comp.getBounds());
comp.paint(comp.getGraphics());
Thread.sleep(DELAY);
}
} catch (Exception e) {
// TODO: handle exception
}
}
}
j
结果截图