JAVA之线程

来源:互联网 发布:浩飞网络 编辑:程序博客网 时间:2024/06/05 19:52


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

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() {@Overridepublic void actionPerformed(ActionEvent arg0) {// TODO Auto-generated method stubdo_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 stubwhile(true){bar.setValue(count+=10);bar.setStringPainted(true);try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.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 stubwhile(true){synchronized ("") {//线程同步if(num > 0){try {Thread.sleep(100);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.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() {@Overridepublic void run() {// TODO Auto-generated method stubwhile(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() {@Overridepublic void run() {// TODO Auto-generated method stubwhile(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 blocke.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()来唤醒

0 0
原创粉丝点击