编写多线程程序,太阳和其他每个行星分别对应一个线程。给定一个数d,要求每个行星都以其实际速度d倍的速度行进。假设太阳是不动的。所以其他行星的速度应当取相对于太阳的速度。每个行星于太阳的距离应当取实际距离的一个比例值。具体的比例值取值只要能使太阳系行星运行图比较直观或者美观就可以。
假设中心(0,0),x=r*cosθ,y=r*sinθ,用角速度计算更新位置。
下面用匀速圆周运动模拟行星运行。八大行星:水星,金星,地球,火星,木星,土星,天王星,海王星。
每个行星对应一个线程,计算行星当前角度;太阳系绘制线程一个,负责场景绘制。共9个线程并发执行。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
//行星动画主窗口
public class PlanetAnimation extends JFrame{
Data sharedData = new Data(); //构造数据对象,里面有行星数据,该对象传递给各个线程
ExclusiveData planetAngle=new ExclusiveData();//各个星球当前的角度
DrawPanel drawPanel;//绘制面板
starThread planetThread[]=new starThread[8];//每个行星一个线程,负责位置更新工作
DrawThread drawThread;//负责太阳系全部绘制工作的线程
int i,j;
public PlanetAnimation() {
super("太阳系行星运行图");
//下面布局界面
//构造绘制面板
drawPanel=new DrawPanel(sharedData,planetAngle);
Container c = getContentPane();
c.add(drawPanel,BorderLayout.CENTER);//画布放在中间
//加载宇宙背景
share