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()来唤醒
相关文章推荐
- java的this关键字
- ubuntu系统下更新jdk版本
- DAO模式
- 将Maven项目转换成Eclipse支持的Java项目
- 【Java基础】类变量(静态变量)、成员变量、局部变量的区分理解及存储分类
- Controller的写法
- Struts的Action中获取域对象API
- 序列化框架的使用及性能对比Kryo、Hessian、Protostuff、java原生
- struts2的内置拦截器
- Java实现对中文字符串的排序功能实例代码
- maven搭建java ee项目图文教程
- Java经典算法汇总之冒泡排序
- java内存的主要划分
- java语言缺漏总结
- Java工具箱之SpringMVC拦截器
- [Java代码] Java实现直接插入排序和折半插入排序算法示例
- Java基础知识强化之集合框架笔记79:HashMap的实现原理
- Spring 框架初步学习
- 入行IT类的第一篇...初学Java感想
- 给eclipse提速小技巧