2021.01.24线程入门

为什么要用线程

在单线程程序中,当一个操作未完成时,必须等正在运行的操作完成后才能运行下一个,过于呆板。线程相当于单独开辟一小块地方让它跑,多个操作可同时运行。

关于线程的使用

1.创建一个线程类,继承父类Thread。
2.start方法
启动线程的方法:线程对象调用start方法。
3.run方法(线程启动时自动开始调用的方法)
执行步骤可改写在此方法中。
3.线程的休眠
在while循环中,不加休眠将看不到小球运动的痕迹

try(){
     Thread.sleep(30);
}catch (Exception ef){}

注:会发现当休眠写在fou循环里面时,当队列中对象变多时会越来越慢。应将休眠写在for外面

队列在线程中的应用

最开始为一个小球占用一个线程,但是线程过多不利于
于是引入队列,将小球对象封装为一个类,将小球存入队列,将多线程又变为单线程。
1.将线程由原来的监听启动改为放到界面类中启动,此后将一直保持运行。

 public void showUI() {
    	 this.setSize(600, 800);
    	 this.setTitle("PLANE");
    	 this.setDefaultCloseOperation(3);
    	 
    	 MyListener l=new MyListener(g,list);
    	 this.addMouseListener(l);
 
    	 this.setVisible(true);
    	 g=this.getGraphics();
    	 DrawThread dt=new DrawThread(g,list);
     	 dt.start();
     }

2.在主界面创建队列,通过构造器传到监听和线程类中
3.将获得的x,y坐标封装为fls对象并加入列表

public void mousePressed(MouseEvent e){
    	int X=e.getX();int Y=e.getY();
    	System.out.println("X="+X);
    	flys fls=new flys(X,Y);
    	list.add(fls);
    }

4.遍历列表,在线程的run方法中画出来

 public void run() {
    	   while(true) {
    	   System.out.println(list.size());
    	   for(int i=0;i<list.size();i++) {
    		   flys fls=list.get(i);  		   
    		   fls.X+=10;
    		   fls.Y=fls.Y+(int)(40*Math.sin(fls.X));
    		   g.fillOval(fls.X, fls.Y, 20, 20);
    		   System.out.println("X="+fls.X);
    		   System.out.println(" "+2*Math.sin(fls.X));
    		   System.out.println("Y="+fls.Y);
    	   }
    	   try {
			   Thread.sleep(30);
		   }catch (Exception ef) {}
    	   }
       }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值