您的位置:首页 > 编程语言 > Java开发

JAVA之线程

2016-07-25 19:34 411 查看




主要内容就是设计表格,获取活跃进程,修改进程优先级的表格操作

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import java.util.Random;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;

public class test extends JFrame{
JTable table = new JTable();
JButton jb = new JButton("button");
JScrollPane js = new JScrollPane(table);
JTextArea jt = new JTextArea(1, 20);
JPanel jp_down = new JPanel();

public test(){
setLocationRelativeTo(null);//居中显示

Container con = getContentPane();
ThreadGroup group = Thread.currentThread().getThreadGroup();//得到当前线程组
Thread[] threads = new Thread[group.activeCount()];//new数组 长度为group.activeCount()
group.enumerate(threads);//保存数组
DefaultTableModel model = (DefaultTableModel)table.getModel();

model.setRowCount(0);
model.setColumnIdentifiers(new Object[] {"ID","name","priority"});
for(Thread thread : threads){
model.addRow(new Object[] {thread.getId(),thread.getName(),thread.getPriority()});
}
table.setModel(model);
jp_down.setLayout(new FlowLayout());
jp_down.add(new JLabel("priority!!"));
jp_down.add(jt);
jp_down.add(jb);
jp_down.setOpaque(false);

jb.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
do_button();
}
});

con.add(jp_down,BorderLayout.SOUTH);
con.add(js,BorderLayout.NORTH);
setVisible(true);
setSize(400, 300);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}

public void do_button(){
Integer num = Integer.parseInt(jt.getText());//text内容软化为int
int selectRow = table.getSelectedRow();
DefaultTableModel model = (DefaultTableModel)table.getModel();
model.setValueAt(num, selectRow, 2);
repaint();
}

public static void main(String[] agrs){
new test();
}
}
//JTable组件显示数据时,如果直接将其放置在Frame的contentPane中则表头一行会显示不出来,
//如果将其放置在JScrollPane中显示数据的话,表头会自动显示出来。

线程优先级






import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import java.util.Random;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;

public class test extends JFrame{
JProgressBar[] bar = new JProgressBar[4];
Thread threads[] = new Thread[4];
int[] priority = {3,4,4,5};

public test(){
setLocationRelativeTo(null);//居中显示
setLayout(new FlowLayout());

for(int i = 0;i<4;i++){
bar[i] = new JProgressBar();
bar[i].setSize(200, 25);
threads[i] = new Thread(new MyThread(bar[i]));//给每个进度条创建线程
threads[i].setPriority(priority[i]);
getContentPane().add(bar[i]);
}

for(int i = 0;i<4;i++){
threads[i].start();
}

setVisible(true);
setSize(200, 200);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}

public class MyThread implements Runnable{

final JProgressBar bar ;
int count = 0;

public MyThread(JProgressBar bar){
this.bar = bar;
}

public void run() {
// TODO Auto-generated method stub
while(true){
bar.setValue(count+=10);
bar.setStringPainted(true);

try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(count == 100)
break;
}

}
}

public static void main(String[] agrs){
new test();
}
}

线程同步
比如购票系统,若用多线程当乘客来购买车票,因为是同步开始,所以对票数刚好到达0但是还处在sleep中时候,会出现负数的情况,所以就需要线程同步来将变量放在共享区

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import java.util.Random;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;

public class test extends JFrame{

public test(){
safeTest st = new safeTest();
Thread a = new Thread(st);
Thread b = new Thread(st);
Thread c = new Thread(st);
a.start();
b.start();
c.start();
}

public class safeTest implements Runnable{

int num = 10;
public void run() {
// TODO Auto-generated method stub
while(true){
synchronized ("") {//线程同步
if(num > 0){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

System.out.println("票数还剩下 : " + num--);
}
}
}
}
}

public static void main(String[] agrs){
new test();
}
}
票数还剩下 : 10
票数还剩下 : 9
票数还剩下 : 8
票数还剩下 : 7
票数还剩下 : 6
票数还剩下 : 5
票数还剩下 : 4
票数还剩下 : 3
票数还剩下 : 2
票数还剩下 : 1 还可以修饰方法


线程通信






import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import java.util.Random;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;

public class test extends JFrame{
int count = 0;
Thread t1;
Thread t2;

public test(){
setLocationRelativeTo(null);
final JProgressBar jp = new JProgressBar();

jp.setStringPainted(true);
t1 = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
if(count >= 100){
System.out.println("full!!!");
break;
}
if(count == 0){
jp.setValue(count += 100);
synchronized (t2) {
t2.notify();
}
}
}
}
});

t2 = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
if(count == 0){
synchronized (this) {
try {
wait();
} catch (Exception e) {
// TODO: handle exception
}
}
}

jp.setValue(--count);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});

t2.start();
t1.start();

getContentPane().add(jp,BorderLayout.NORTH);
setVisible(true);
setSize(200,100);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}

public static void main(String[] agrs){
new test();
}
}

wait()需要notify()来唤醒
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: