中易网

java如何实现多线程绘图

答案:5  悬赏:40  
解决时间 2021-01-14 07:17
  • 提问者网友:杀生予夺
  • 2021-01-13 16:02
java如何实现多线程绘图
最佳答案
  • 二级知识专家网友:玩家
  • 2021-01-13 17:08
你单线程就可以实现啦,你直接在paint函数中根据他们的规律以变量的形式画出三个指针,然后再用线程中的run()中实现每一秒钟重画一次如
public void run(){
while(true){
Thread.sleep(1000);
frame.repaint();
}
}
这样就可以了,我之前刚好也做过,初学者,如果有需要,我可以把我做的源代码给你。。。
全部回答
  • 1楼网友:想偏头吻你
  • 2021-01-13 21:15
多线程是java语言区别于其它语言的一大特点。其它语言向C++的话如果要实现多线程的话,必须调用操作系统的多线程机制。
在java5以前实现多线程有两种方法(继承Thread类和实现Runnable接口)。
它们分别为:
使用new Thread()和new Thread(Runnable)形式
第一种直接调用thread的run方法,所以,往往使用Thread子类,即new SubThread()。
第二种调用Runnable的run方法。
第一种:
new Thread(){}.start();这表示调用Thread子类对象的run方法,new Thread(){}表示一个Thread的匿名子类的实例对象,子类加上run方法后的代码如下:
new Thread(){
public void run(){
}
}.start();

第二种:
new Thread(
new Runnable(){}
).start();
这表示调用Thread对象接受的Runnable对象的run方法,new Runnable(){}表示一个Runnable的匿名子类的实例对象。
runnable的子类加上run方法后的代码如下:
new Thread(new Runnable(){
public void run(){
}
}
).start();

从java5开始,还有如下一些线程池创建多线程的方式:
package com.yonyou.test;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Test{
public static void main(String[] args){
ExecutorService pool = Executors.newFixedThreadPool(3);
for(int i=0;i<10;i++)
{
pool.execute(new Runnable(){public void run(){ System.out.println();}});
}
Executors.newCachedThreadPool().execute(new Runnable(){public void run(){}});
Executors.newSingleThreadExecutor().execute(new Runnable(){public void run(){}});
}
}
  • 2楼网友:痴妹与他
  • 2021-01-13 20:48
java中多线程的实现方式有两种,一种是继承java.lang.Thread类,另一种是实现java.lang.Runnable接口。
下面是两种方式的简单代码。
继承Thread类方式:import java.lang.Thread; //用集成Thread类方式实现多线程。 public class Test{ public static void main(String arg[]){ T t1=new T(); T t2=new T(); //更改新线程名称 t1.setName("t1"); t2.setName("t2"); //启动线程 t1.start(); t2.start(); } } class T extends Thread{ //重写run()方法 public void run(){ System.out.println(this.getName()); } }输出结果为:t1t2实现Runnable接口方式:在使用Runnable接口时需要建立一个Thread实例。因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例。import java.lang.*; //用实现Runnable接口的方式实现多线程。 public class Test{ public static void main(String arg[]){ T t1=new T(); T t2=new T(); //一定要实例化Thread对象,将实现Runnable接口的对象作为参数传入。 Thread th1=new Thread(t1,"t1"); Thread th2=new Thread(t2,"t2"); //启动线程 th1.start(); th2.start(); } } class T implements Runnable{ //重写run()方法 public void run(){ System.out.println(Thread.currentThread().getName()); } }输出结果为:t1t2public void run()方法是JAVA中线程的执行体方法,所有线程的操作都是从run方法开始,有点类似于main()方法,即主线程。
  • 3楼网友:刀戟声无边
  • 2021-01-13 19:14
我暂时保留我的看法!
  • 4楼网友:迷人又混蛋
  • 2021-01-13 17:44
首先,如果你只是要实现电子时钟,根本就不需要用到多线程。
如果你真的是要使用,就新建一个类,实现Runnable接口就是了。
如:
class MyThread1 implements Runnable{
public MyThread(){
}
public void run(){
}
}
使用的时候,就:
Thread myThread=new Thread(new MyThread());
myThread.start();
如果要画图,你就直接把组件通过构造方法传到MyThread中就是了
追问:不用线程怎么做?
追答:你为什么要使用线程呢? try{ Thread.sleep(1000);}catch(Exception ex){System.exit(0);}然后你再在这里的后面更新你的显示不就可以了吗?
追问:那分钟,小时怎么搞?换算成60*1000 3600*1000?我做的时候很麻烦,因为两个数字显示的时间总是不同步,我想是因为两个在执行过程中产生了时间差,所以我准备用线程同步机制做。。
追答:亲,如果你是用JLable来显示的话,你不会:
hour.setText("**");
min.setText("**");
sec.setText("**");
把这些同时放在一个大括号里面不行吗??
追问:难道你是这个意思?while(true) {
Thread.sleep(1000);
t++;
if(t % 3600 == 0) {
hour.setText( (h+1)%24);
}
if(t % 60 == 0) {
min.setText((m+1)%60);
}
sec.setText((s+1)%60);
}好想法! 我一直想着每个时间都要一个时钟信号,谢谢了。 看来我的逻辑思维,数学思维能力有待提高。但是话说回来,线程同步可以让另外两个线程阻塞,减少判断次数,也不错。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息