多线程问题 synchronized
while (true) {
// synchronized ("") {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
bar.setValue(count += 10);
System.out.println(Thread.currentThread().getName() + "加10");
if(count>=100)
break;
}
setPriority("threadA",8,threadA);
setPriority("threadB",5,threadB);
setPriority("threadC",2,threadC);
setPriority("threadD",1,threadD);
运行结果:是由顺序的abcd.
在加上synchronized 之后结果变为
部分截图
发现顺序不是依次的abcd了
完整代码:
import javax.swing.*;
import java.awt.*;
public class Demo01SetPriority extends JFrame {
//定义4个进度条
final JProgressBar progressBar0=new JProgressBar();
final JProgressBar progressBar1=new JProgressBar();
final JProgressBar progressBar2=new JProgressBar();
final JProgressBar progressBar3=new JProgressBar();
public Demo01SetPriority(){
getContentPane().add(progressBar0, BorderLayout.NORTH);
getContentPane().add(progressBar1,BorderLayout.CENTER);
getContentPane().add(progressBar2,BorderLayout.SOUTH);
// getContentPane().add(progressBar3,BorderLayout.);
progressBar0.setStringPainted(true);
progressBar1.setStringPainted(true);
progressBar2.setStringPainted(true);
// progressBar3.setStringPainted(true);
Mythread mythread =new Mythread(progressBar0);
Thread threadA =new Thread(mythread);
Thread threadB =new Thread(new Mythread(progressBar1));
Thread threadC =new Thread(new Mythread(progressBar2));
Thread threadD =new Thread(new Mythread(progressBar3));
setPriority("threadA",8,threadA);
setPriority("threadB",5,threadB);
setPriority("threadC",2,threadC);
setPriority("threadD",1,threadD);
}
//设置线程的名字,优先级
public static void setPriority(String threadName,int priority,Thread t){
t.setName(threadName);
t.setPriority(priority);
t.start();
}
public static void main(String[] args) {
init(new Demo01SetPriority(),100,100);
}
public static void init(JFrame frame,int width,int height){
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(width,height);
frame.setVisible(true);
}
}
import javax.swing.*;
public class Mythread implements Runnable {
private final JProgressBar bar;
int count=0;
public Mythread(JProgressBar bar){
this.bar=bar;
}
@Override
public void run() {
while (true) {
synchronized ("") {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
bar.setValue(count += 10);
System.out.println(Thread.currentThread().getName() + "加10");
if(count>=100)
break;
}
}
}
}