简单线程使用--如何用线程绘制多个小球

什么是线程?

Thread类中有这样的明确定义:线程是程序中执行的线程,Java虚拟机允许程序同时运行多个执行线程。

线程状态

  1. 新建:当使用new操作符创建新线程时,线程处于“新建“状态
  2. 运行(可运行):调用start()方法
  3. 阻塞:当线程需要获得对象的内置锁,而该锁正在被其他线程拥有
  4. 等待:当线程等待其他线程通知调度表可以运行时
  5. 计时等待:对于一些含有时间参数的方法,如Thread类的sleep()
  6. 终止:当run()方法运行完毕或出现异常时

使用线程的意义:

  • 更高的运行效率,——并行;
  • 多线程是模块化的编程模型;
  • 与进程相比,线程的创建和切换开销更小;
  • 通信方便;
  • 能简化程序的结构,便于理解和维护;更高的资源利用率。

注意:多线程上下文切换的性能损耗:上下文切换(线程切换,进程切换,模式切换,地址空间切换)

线程创建:

  1. 方法一:声明一个类是Thread类

在这个类中必须要有run方法,在run方法中实现具体的功能:

class MyThread extends Thread {

    public void run() {
    //具体的方法
    System.out.println(Calendar.getInstance().getTime());//系统时间
    }
}

然后创建一个线程并使用start()使其开始运行:

MyThread myThread=new MyThread();
myThread.start();
  1. 方法二:声明一个实现 Runnable接口的类

实现 Runnable接口的类, 在该类中实现 run 方法,:

class MyThreard implements Runnable {
    public void run() {
        System.out.println(Calendar.getInstance().getTime());
    }
}

然后创建一个线程并开始运行:

MyThreard p = new MyThreard();
new Thread(p).start();

实例展示:

  1. 一个线程顺序执行
package test;

/**
 * @User: idnihai
 * @Date: 17:11 2020/8/11
 */
public class TestMythread extends Thread{
    public static void main(String [] args){
        TestMythread testMythread = new TestMythread();
        testMythread.start();
    }
    public void run(){
        for(int i=0;i<10;i++){
            System.out.println(currentThread().getName()+"  "+i);
        }
        for(int i=0;i<10;i++){
            System.out.println(currentThread().getName()+"  "+i);
        }
    }
}

运行结果:

Thread-0  0
Thread-0  1
Thread-0  2
Thread-0  3
Thread-0  4
Thread-0  5
Thread-0  6
Thread-0  7
Thread-0  8
Thread-0  9
Thread-0  0
Thread-0  1
Thread-0  2
Thread-0  3
Thread-0  4
Thread-0  5
Thread-0  6
Thread-0  7
Thread-0  8
Thread-0  9
  1. 两个及以上:
package test;

/**
 * @User: idnihai
 * @Date: 17:11 2020/8/11
 */
public class TestMythread extends Thread{
    public static void main(String [] args){
        TestMythread testMythread = new TestMythread();
        testMythread.start();
        TestMythread testMythread1 = new TestMythread();
        testMythread1.start();
    }
    public void run(){
        for(int i=0;i<10;i++){
            System.out.println(currentThread().getName()+"  "+i);

        }

    }
}

运行结果:

Thread-1  0
Thread-0  0
Thread-1  1
Thread-0  1
Thread-1  2
Thread-0  2
Thread-1  3
Thread-0  3
Thread-1  4
Thread-0  4
Thread-1  5
Thread-0  5
Thread-1  6
Thread-1  7
Thread-1  8
Thread-0  6
Thread-1  9
Thread-0  7
Thread-0  8
Thread-0  9
  1. 多线程绘制小球:
    创建多个线程实现同时进行多个小球的移动路径绘制
public void run(){
	for(int i=0;i<400;i++){
	     g.fillOval(x+i*2,y,30,30);
		//延时
	     try{
	     Thread.sleep(30);//
	     }catch(Exception ef){} 
} 

展示:
在这里插入图片描述
问题:
多线程绘制时存在画面闪烁问题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值