当前位置:首页 > 服务端 > swing与多线程的结合

swing与多线程的结合

2022年11月09日 09:58:44服务端8

swing与多线程的结合

这篇博客记录java中多线程的学习内容,通过与swing结合加深理解

我之前写过一篇PyQt中的多线程实现方法,感觉与之类似,因此只做简单记录。

雪花向前滚动的实例

代码

package Number;

import javax.swing.*;
import java.awt.*;
import java.net.URL;

public class SwingAndThread extends JFrame implements Runnable{
     
    private JLabel jl = new JLabel();
    private static Thread t;
    private Container container = getContentPane();
    private int count = 0;

    public SwingAndThread(){
     
        setBounds(300, 200, 250, 100);
        container.setLayout(null);
        URL url = SwingAndThread.class.getResource("/1.gif");
        Icon icon = new ImageIcon(url);
        jl.setIcon(icon);
        jl.setHorizontalAlignment(SwingConstants.LEFT);

        jl.setBounds(10,10,200,50);
        jl.setOpaque(true);

        container.add(jl);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
     
        SwingAndThread frame = new SwingAndThread();
        Thread t = new Thread(frame);
        t.start();
    }

    @Override
    public void run() {
     
        while(true){
     
            jl.setBounds(count, 10, 250, 50);
            count += 5;
            try {
     
                Thread.sleep(500);
            } catch (InterruptedException e) {
     
                e.printStackTrace();
            }
            if(count == 200){
     
                count = 10;
            }
        }
    }
}

看看实现效果

QQ录屏20211129092929

线程中添加线程

使用join方法,实现在一个进度条线程A中加入另一个进度条线程B,并在20%时让B先执行,然后继续执行A

直接上代码

package Number;

import javax.swing.*;
import java.awt.*;

public class JoinThread extends JFrame {
     
    private Thread A;
    private Thread B;
    final JProgressBar progressBarA = new JProgressBar();
    final JProgressBar progressBarB = new JProgressBar();
    int count = 0;
    private Container c = getContentPane();

    public JoinThread() {
     
        super();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        setLayout(new BorderLayout());
        setSize(400, 100);
        c.add(progressBarA, BorderLayout.NORTH);
        c.add(progressBarB, BorderLayout.SOUTH);
        progressBarA.setStringPainted(true);
        progressBarB.setStringPainted(true);

        A = new Thread(new Runnable() {
     
            @Override
            public void run() {
     
                int count = 0;
                while (true) {
     
                    progressBarA.setValue(++count);
                    try {
     
                        Thread.sleep(100);
                        if(count == 20){
     
                            B.join();
                        }
                    } catch (InterruptedException e) {
     
                        e.printStackTrace();
                    }
                    if (count == 100) {
     
                        break;
                    }
                }

            }
        });
        A.start();

        B = new Thread(new Runnable() {
     
            @Override
            public void run() {
     
                int count = 0;
                while (true) {
     
                    progressBarB.setValue(++count);
                    try {
     
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
     
                        e.printStackTrace();
                    }
                    if (count == 100) {
     
                        break;
                    }
                }

            }
        });
        B.start();
    }

    public static void main(String[] args) {
     
        new JoinThread();
    }
}

主要知识点:

  • 进度条的设置,JProgressBar是swing中的控件;
  • Runnable接口的实现;
  • 线程B的加入,使用join方法;
  • 线程B完成后,需要使用break,使线程结束,然后继续进行A线程。
  • 另一个需要特殊说明的是,我上一个雪花滚动的线程示例中,在创建类的时候,用implement来实现了Runnable接口,而下面这个并没有这么写,这是因为在前面写implement Runnable后,程序中必须要重写run方法,而这个run方法只有一个,但是我有两个线程都需要重写这个run方法,这个run方法无法区分是A线程还是B线程,因此下面这个实力是在创建线程的时候,直接new的Runnable接口,new的时候,就无需在前面写implement了。

看看实现效果

QQ录屏20211129093035

作者:栀椩
来源链接:https://blog.csdn.net/u012848304/article/details/121602929

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/68705.html

标签: Java多线程
分享给朋友:

“swing与多线程的结合” 的相关文章

Java总结篇系列:Java多线程(二)

本文承接上一篇文章《Java总结篇系列:Java多线程(一)》。 四.Java多线程的阻塞状态与线程控制 上文已经提到Java阻塞的几种具体类型。下面分别看下引起Java线程阻塞的主要方法。 1.join() join —— 让一个线程等待另一个线程完成才继续执...

(2021最新版)Java后端面试题|Java多线程与并发

(2021最新版)Java后端面试题|Java多线程与并发

(2021最新版)Java后端面试题|Java多线程与并发 前言 很多朋友问,如何短时间突击 Java 通过面试? 面试前还是很有必要针对性的刷一些题,很多朋友的实战能力很强,但是理论比较薄弱,面试前不做准备是很吃亏的。这里整理了很多面试常考的一些面试题,...

Java多线程编程-(17)-多线程异步调用之Future模式

Java多线程编程-(17)-多线程异步调用之Future模式

一、线程计数器回顾 在《Java多线程编程-(6)-两种常用的线程计数器CountDownLatch和循环屏障CyclicBarrier》 这一篇中,我们使用线程计数器的方式实现了在主线程中等待计数的线程执行完之后在执行阻塞等待之后的代码。看段代码...

Java多线程超级详解(看这篇就足够了)

Java多线程超级详解(看这篇就足够了)

主要会详解以下六大点: 基本概念 很多人都对其中的一些概念不够明确,如同步、并发等等,让我们先建立一个数据字典,以免产生误会。 进程 在操作系统中运行的程序就是进程,比如你的QQ、播放器、游戏、IDE等等 线程...

JAVA多线程实现及四种线程池使用

JAVA多线程实现及四种线程池使用

Java多线程实现及四种线程池和new Thread的使用及差别 线程的生命周期分为:new,runnable,running,block,termate. java多线程的几种实现方式: 继承Thread类,重写run方法...

Java使用多线程异步执行批量更新操作

Java使用多线程异步执行批量更新操作

写在前面: 相信不少开发者在遇到项目对数据进行批量操作的时候,都会有不少的烦恼,尤其是针对数据量极大的情况下,效率问题就直接提上了菜板。因此,开多线程来执行批量任务是十分重要的一种批量操作思路,其实这种思路实现起来也十分简单,就拿批量更新的操作举例...

Java多线程导论及延申

Java多线程导论及延申

我的博客中有更多后端开发面试题,点我查看! 并发大全 2万字参透并发编程 jvm中线程分为哪些状态 在执行Thread.start()方法后,线程是不是马上运行。 多线程导论 原子性是指在...

java多线程实现的常用两种方法

作为或即将成为一名Java工程师,在工作和面试中必然要与多线程打交道,那么Java中的多线程是什么呢?我们先来聊一聊操作系统中的进程和线程 1.进程和线程 进程和线程的区别 进程简单来说就是操作系统中的一个任务,可以说是程序的执行,比如说你的电脑正在运行QQ和...

Java多线程demo

Java多线程demo

demo代码如下: package com.test; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.con...

Java 多线程事务回滚 ——多线程插入数据库时事务控制

背景 日常项目中,经常会出现一个场景,同时批量插入数据库数据,由于逻辑复杂或者其它原因,我们无法使用sql进行批量插入。串行效率低,耗时长,为了提高效率,这个时候我们首先想到多线程并发插入,但是如何控制事务呢 … 直接上干货 实现效果...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。