线程

一:什么是线程?

线程是通过利用CPU的轮转,让程序中不同的代码段同时执行的机制

二:Java是怎样写线程的?

通过接口Runnable来实现的

三:用一个小实例来展示java中的线程这一概念

import java.awt.*;

public class MyTest {
    public static void main(String[] args) {
        Frame f=new Frame();  //创建窗体
        f.setSize(300, 400);  //设置窗体大小
            
        f.show();  //窗体可见
        
        MyPanel mp=new MyPanel(); //实例化对象
        f.add(mp); //将mp添加到窗体
        
        Thread t=new Thread(mp); //用一个新的对象来包装run(),特别注意,new这个Thread对象的时候就放进去mp
        t.start();  //引用start
        
    

    }

}
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Panel;

public class MyPanel extends Panel implements Runnable{  //让MyPanel继承Panel,并且连接接口Runnable
    int x=150,y=0; //给小球设置起始坐标变量,并附初始值
    
public void paint(Graphics g) {
    g.setColor(Color.BLUE);//设置小球的颜色
    
    g.fillOval(x, y, 20, 20);//设置小球的位置跟大小
    
}
@Override
public void run() {  //这个run()方法必须的有,因为接了接口Runnable
    // TODO Auto-generated method stub
    while(true) {
        x++;//改变x跟y值
        y++;
        try{
            Thread.sleep(15);//线程中的阻塞,给小球设置下滑的速度为15毫秒,能让小球优雅地飞
      }catch(Exception e) {}
        repaint();//重画图像
            
        }
    }
    
}

四:练习让小球碰到屏幕后反弹,四个面都要被反弹

import java.awt.*;

public class MyTest {
    public static void main(String[] args) {
        Frame f=new Frame();  //创建窗体
        f.setSize(300, 400);  //设置窗体大小
            
        f.show();  //窗体可见
        
        MyPanel mp=new MyPanel(); //实例化对象
        f.add(mp); //将mp添加到窗体
        
        Thread t=new Thread(mp); 
        t.start();
        
    

    }

}
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Panel;

public class MyPanel extends Panel implements Runnable{  //让MyPanel继承Panel,并且连接接口Runnable
    int x=150,y=0; //给小球设置起始坐标变量,并附初始值
    int flag=1;
public void paint(Graphics g) {
    g.setColor(Color.BLUE);//设置小球的颜色
    
    g.fillOval(x, y, 20, 20);//设置小球的位置跟大小
    
}

    
    @Override
    public void run() {
        while(true) {
            if(flag==1) {
                x++;
                y++;
            }
            if(flag==2) {
                x--;
                y++;
            }
            if(flag==3) {
                x--;
                y--;
            }
            if(flag==4) {
                x++;
                y--;
            }
            
             if(x>150&&y>100){
                    if(flag==1) {
                        flag=2;
                    }
                    }
                if(x<150&&y>100){
                    if(flag==2){
                    flag=3;
                    }
                }
                
                if(x<0&&y<100){
                    if(flag==3){
                        flag=4;
                    }
                }
                
                if(x>150&&y<0){
                    if(flag==4){
                        flag=1;
                    }
                }
try { Thread.sleep(15); }catch(Exception e) {} repaint(); } } }

上面这个练习题自己做得感觉不太好,希望有大佬能够指点指点

原文地址:https://www.cnblogs.com/Leia2/p/12019616.html