学了多线程---日常2022年6月14日
这两天学了多线程的更深层次的运用,比如Timer类,虽然还是不太熟悉,不过这是一种可以计时使用的进程类,后来的作业有布置做两个线程,这时候就要用到synchronized,这是一个线程锁,确保两个线程不会同时运行,好像还有一个lock的方法,下次看看,今天太晚了就不看了,调用access数据表里的行数据可以用absolute()方法,上次给组件画轨迹,不断创建Jlabel类,再放进去,轨迹不会消失,成功了,结果如下
package 实验15;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.Point;
public class Third {
public static void main(String[] args) {
// TODO 自动生成的方法存根
win a=new win();
}
}
class win extends Thread{
JFrame jf;
JLabel jl1,jl2;
JLabel j1;
static String str1,str2;
Thread move;
int speed=10;
int x1=40,x2=300,y1=30,y2=10,count=0;
int r=60;
win(){
move=new Thread(this);
jf=new JFrame("标签移动");
jf.setSize(600, 400);
jf.setLayout(null);
init();
jf.setVisible(true);
jf.setLocationRelativeTo(null);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//界面基本设置
}
void init() {
str1="方形";str2="圆形";
jl1=new JLabel(str1);jl1.setForeground(Color.RED);
jl2=new JLabel(str2);jl2.setForeground(Color.BLUE);//标签颜色设置
jl1.setBounds(x1, y1, 250, 40);
jl2.setBounds(x2,y2, 250, 40);
move.start();//进程开始运行
jf.add(jl2);jf.add(jl1);
}
public void run() {
x2+=100;y2+=100;//设定圆心
while(true) {
System.out.println("运行中");
System.out.println(count);//运行过程正常检测程序
count++;
jl2.setBounds((int)(x2+(r*Math.cos(count))),(int)(y2+(r*Math.sin(count))), 250, 40);//标签运动
JLabel j2=new JLabel(".");
j2.setBounds((int)(x2+(r*Math.cos(count))),(int)(y2+(r*Math.sin(count))), 250, 40);//标签的运动轨迹
jf.add(j2);
if(count<30) {
y1+=5;
jl1.setBounds(x1,y1, 250, 40);//标签运动
JLabel jl=new JLabel(".");
jl.setBounds(x1, y1, 250, 40);//标签运动轨迹
jf.add(jl);
}
if(count>=30&&count<60) {
x1+=5;
jl1.setBounds(x1,y1, 250, 40);//标签运动
JLabel jl=new JLabel(".");
jl.setBounds(x1, y1, 250, 40);//标签运动轨迹
jf.add(jl);
}
if(count>=60&&count<90) {
y1-=5;
jl1.setBounds(x1,y1, 250, 40);//标签运动
JLabel jl=new JLabel(".");
jl.setBounds(x1, y1, 250, 40);//标签运动轨迹
jf.add(jl);
}
if(count>=90&&count<120) {
x1-=5;
jl1.setBounds(x1,y1, 250, 40);//标签运动
JLabel jl=new JLabel(".");
jl.setBounds(x1, y1, 250, 40);//标签运动轨迹
jf.add(jl);
}
if(count>=120) {
count=0;
x1=40;y1=30;//标签回到原点
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
线程总是一起开始,好麻烦,只能让一个先睡几秒了

浙公网安备 33010602011771号