55.【Java 线程】(二)

简介: 55.【Java 线程】

(五)、漫天星辰

import java.awt.*;
import java.util.Random;
public class panel extends Panel implements Runnable {
    int x=10;
    int y=10;
    int size=30;
    int m=500;
    int n=350;
    int k=650;
    int s=200;
    int f=200;
    public void paint(Graphics g) {
        //绘画云朵
        g.setColor(Color.LIGHT_GRAY);
        g.fillOval(m,250,300,150);
        g.fillOval(n,300,300,100);
        g.fillOval(k,300,300,100);
        //绘画月亮
        Color c = new Color(255, 255, 0);
        g.setColor(c);
        g.fillOval(200, 200, 100, 100);
        Color c1 = new Color(0, 0, 0);
        g.setColor(c1);
        //绘制半月
        g.fillArc(s, f, 100, 100, 0, 360);
        //绘画星星
        Color c2 = new Color(255, 192, 203);
        g.setColor(c2);
        Font f = new Font("黑体", Font.BOLD, size);
        g.setFont(f);
        int i=0;
        Random r=new Random();
        while(i++<300){
            x=r.nextInt(1980)+1;
            y=r.nextInt(1024)+1;
            g.drawString("*", x, y);}
    }
    public void run(){  //覆盖线程的操作
        while(true){
            if(n>=1980){   //云朵
                n=350;   //左
                m=500;    //中
                k=650;    //右
            }
            if(f>310){   //半月
                s=200;
                f=200;
            }
            f++;
            s++;
            x++;
            y++;
            m++;
            k++;
            n++;
            try {
                Thread.sleep(30);
            }catch (Exception e){
                e.printStackTrace();
            }repaint();
        }
    }
}

主方法:

import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello  {
    public static void main(String []avgs) {
        Frame f=new Frame();
        f.setTitle("宝马");
        f.setBackground(Color.BLACK);
        f.setSize(800,800);
        panel p=new panel();
        f.add(p);
        Thread t=new Thread(p);  //添加线程
        t.start();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
        System.out.println(Thread.activeCount());   //当前线程活跃数目
        //Thread.currentThread().getThreadGroup().list();   //得到调用线程的列表
    }
}

注意:我们在使用Thread 类的sleep()方法的时候,我们要对其进行异常处理操作,否则会报错的.

(六)、提词器

方法类:

import java.awt.*;
import java.util.Random;
public class panel extends Panel implements Runnable {
    int x=100;
    public void run(){
       while (true){
        x=x+10;
        if(x>1920){
            x=100;
        }
        try {
            Thread.sleep(30);
        }catch (Exception e){
            e.printStackTrace();
        }repaint();
       }
    }
    public void paint(Graphics g) {
        Font f=new Font("黑体",Font.BOLD ,80);
        Color c=new Color(225,215,30);
        g.setColor(c);
        g.setFont(f);
        g.drawString("你",x,250);
        }
}

主类:

import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello  {
    public static void main(String []avgs) {
        Frame f=new Frame();
        f.setTitle("宝马");
        f.setBackground(Color.BLACK);
        f.setSize(1920,1080);
        panel p=new panel();
        f.add(p);
        Thread t=new Thread(p);
        t.start();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
        System.out.println(Thread.activeCount());   //当前线程活跃数目
        //Thread.currentThread().getThreadGroup().list();   //得到调用线程的列表
    }
}

(七)、回弹的小球

类方法

import javax.swing.*;
import java.awt.*;
import java.util.Random;
public class panel extends Panel implements Runnable {
    int x=100;
    int y=100;
    int att=0;
    public void run(){
     while (true){
        //设置四个姿态:
        //右墙
        if(att==0){
            x++;
            y++;
        }
        //下强
        if(att==1){
            x--;
            y++;
        }if(att==2){//左墙
            x--;
            y--;
        }if(att==3){//上强
            x++;
            y--;
        }
        if(x>733){
            if(att==0){att=1;}
            else{att=2;}
        }
        if(y>711){回弹
            if(att==1){att=2;
            }else{att=3;}
        }
        if(x<0){
            if(att==2){
                att=3;
            }else{
                att=0;
            }
        }
        if(y<0){
            if(att==3){att=0;}
            else{att=1;}
        }
        try {
            Thread.sleep(1);
        }catch (Exception e){
            e.printStackTrace();
        }repaint();
    }}
    public void paint(Graphics g) {
        Color c=new Color(255,0,255);
        g.setColor(c);
        g.fillOval(x,y,50,50);
        }
}

类方法:

import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello  {
    public static void main(String []avgs) {
        Frame f=new Frame();
        f.setTitle("宝马");
        f.setBackground(Color.BLACK);
        f.setSize(800,800);
        panel p=new panel();
        f.add(p);
        Thread t=new Thread(p);
        t.start();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }
}

(八)满天星辰(垂直降落版本)

基本思路:如果要垂直降落的话,我们需要借助一个载体来帮我们储存乱序的300颗星星,首先我们呢可以想到数组的作用。数组可以帮我们用来储存元素的一系列的操作。首先我们要分析这个数组要建立在paint方法的外面因为如果放在里面,在线程的调用的同时我们的数组也会重新更新。我们的而目的是不让数组更新,所以数组必须在类外进行初始化。初始化的时候我们得想到构造函数,利用构造函数进行对数组得第一个300元素进行随机分配。然后在run函数里面对初始化得数组进行高度++程序,从而到达垂直降落的效果。

类方法:

import javax.swing.*;
import java.awt.*;
import java.util.Random;
public class panel extends Panel implements Runnable  {
    int []m=new int[300];
    int []n=new int[300];
    public panel(){   //利用构造函数进行初始化前300
        for(int i=0;i<300;i++){
            Random r=new Random();
            int m1=r.nextInt(1920)+1;
            int n1=r.nextInt(1080)+1;
            m[i]=m1;n[i]=n1;
        }
    }
    public void run(){
        while(true){
            for(int i=0;i<300;i++) {
                n[i]++;
                if(n[i]==1080){
                    n[i]=0;
                }
            }
            try {
                Thread.sleep(10);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }repaint();
        }
    }
    public void paint(Graphics g){
                Font f1 = new Font("黑体", Font.BOLD, 30);
                Random r = new Random();
                int m1=r.nextInt(255)+1;
                int m2=r.nextInt(255)+1;
                int m3=r.nextInt(255)+1;
                g.setFont(f1);
                Color c = new Color(m1, m2, m3);
                g.setColor(c);
                for (int i=0;i<300;i++) {   //绘制300个星星
                g.drawString("*", m[i], n[i]);
            }
    }
}

主方法:

import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello {
    public static void main(String[] avgs) {
    Frame f=new Frame("小球的撞击效果示范图");
    f.setSize(1920,1080);
    f.setBackground(Color.black);
    f.setLocationRelativeTo(null);
    panel p=new panel();
    f.add(p);
    Thread t=new Thread(p);
    t.start();
    f.setVisible(true);
    }
}

相关文章
|
12天前
|
安全 Java 调度
Java编程时多线程操作单核服务器可以不加锁吗?
Java编程时多线程操作单核服务器可以不加锁吗?
32 2
|
1天前
|
Java 关系型数据库 MySQL
如何用java的虚拟线程连接数据库
本文介绍了如何使用Java虚拟线程连接数据库,包括设置JDK版本、创建虚拟线程的方法和使用虚拟线程连接MySQL数据库的示例代码。
14 6
如何用java的虚拟线程连接数据库
|
4天前
|
Java 数据库 UED
Java的多线程有什么用
Java的多线程技术广泛应用于提升程序性能和用户体验,具体包括:提高性能,通过并行执行充分利用多核CPU;保持响应性,使用户界面在执行耗时操作时仍流畅交互;资源共享,多个线程共享同一内存空间以协同工作;并发处理,高效管理多个客户端请求;定时任务,利用`ScheduledExecutorService`实现周期性操作;任务分解,将大任务拆分以加速计算。多线程尤其适用于高并发和并行处理场景。
|
16天前
|
存储 缓存 Java
java线程内存模型底层实现原理
java线程内存模型底层实现原理
java线程内存模型底层实现原理
|
16小时前
|
Java 调度
Java一个线程的生命周期详解
Java中,一个线程的生命周期分为五个阶段:NEW(新建),RUNNABLE(可运行),BLOCKED(阻塞),WAITING(等待),TERMINATED(终止)。线程创建后处于新建状态,调用start方法进入可运行状态,执行中可能因等待资源进入阻塞或等待状态,正常完成或异常终止后进入终止状态。各状态间可相互转换,构成线程的生命周期。
|
1天前
|
Java 开发者
农行1面:Java如何保证线程T1,T2,T3 顺序执行?
本文探讨了如何保证线程T1、T2、T3的顺序执行,这是农行面试中的一道题目,旨在考察候选人对多线程基础、同步机制、线程间通信及Java并发包的掌握情况。文章详细介绍了六种方法:`join()`、`CountDownLatch`、`Semaphore`、单线程池、`synchronized` 和 `CompletableFuture`,并通过示例代码展示了每种方法的具体实现。这些方法不仅适用于面试备考,还能帮助开发者更好地理解和掌握线程同步技术。
19 2
|
16小时前
|
Java API 调度
Java 多线程编程详解
《Java多线程编程详解》深入浅出地讲解了Java平台下的多线程核心概念、API使用及最佳实践。从基础理论到实战案例,本书帮助读者掌握并发编程技巧,提升软件开发中的效率与性能,是Java开发者不可或缺的参考指南。
|
20天前
|
缓存 Java 应用服务中间件
Java虚拟线程探究与性能解析
本文主要介绍了阿里云在Java-虚拟-线程任务中的新进展和技术细节。
|
18天前
|
Java 开发者
Java中的多线程基础与应用
【9月更文挑战第22天】在Java的世界中,多线程是一块基石,它支撑着现代并发编程的大厦。本文将深入浅出地介绍Java中多线程的基本概念、创建方法以及常见的应用场景,帮助读者理解并掌握这一核心技术。
|
14天前
|
Java 调度
Java-Thread多线程的使用
这篇文章介绍了Java中Thread类多线程的创建、使用、生命周期、状态以及线程同步和死锁的概念和处理方法。
Java-Thread多线程的使用