JAVA之多线程(二)
来源:互联网 发布:mac电脑开不了机 编辑:程序博客网 时间:2024/06/05 16:06
人有生老病死,一个周期,线程也不例外,它包括有七种状态:
出生状态,就绪状态,运行状态,等待状态,休眠状态阻塞状态,死亡状态。
很多人都认为多线程是同时执行,其实不然,在同一个时间点只有一个线程被执行,因为线程的切换速度太快,所以让人误以为是同时进行。
下面举个老栗子:
代码如下:
package com.xiancheng2.org;import java.awt.Color;import java.awt.Graphics;import java.util.Random;import javax.swing.JFrame;public class SleepWayTest extends JFrame{ private Thread t; //定义颜色数组 private static Color[] color = { Color.BLACK,Color.BLUE,Color.CYAN,Color.GREEN,Color.ORANGE }; private final static Random rand = new Random(); private static Color getC(){ return color[rand.nextInt(color.length)]; } public SleepWayTest(){ t = new Thread(new Runnable() { int x = 30; int y = 50; @Override public void run() { // TODO Auto-generated method stub while(true){ try { //线程休眠0.1秒 Thread.sleep(100); } catch (InterruptedException e) { // TODO: handle exception e.printStackTrace(); } //获取组件绘图上下文对象 Graphics graphics = getGraphics(); //设置绘图颜色 graphics.setColor(getC()); //绘制直线并递增垂直坐标 graphics.drawLine(x, y, 100, y++); if(y >= 80){ y = 50; } } } }); t.start(); } public static void main(String[] args){ init(new SleepWayTest(),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); }}
getC()方法:用于随机产生Color类型的对象
getGraphics():顾名思义获取Graphics对象
setColor():为图形设置颜色。
下面说下关于线程的加入问题,其实很简单,打个比方小狼在家打LOL,这时有警察来调查案子,小狼就不得不放下LOL,去开门配合调查,调查完才能继续打撸。线程就是这样,当某个线程使用join()方法加入到另外一个线程,那个被加入的线程就要等待该线程执行完毕后再继续执行。 上个栗子:
package com.xiancheng2.org;import java.awt.BorderLayout;import javax.swing.JFrame;import javax.swing.JProgressBar;public class JoinExample extends JFrame { private Thread threadA; private Thread threadB; private JProgressBar progressBar1 = new JProgressBar(); private JProgressBar progressBar2 = new JProgressBar(); int count = 0; public static void main(String[] args){ init(new JoinExample(),100,100); } public JoinExample(){ super(); getContentPane().add(progressBar1, BorderLayout.NORTH); getContentPane().add(progressBar2, BorderLayout.SOUTH); progressBar1.setStringPainted(true); progressBar2.setStringPainted(true); threadA = new Thread(new Runnable(){ int count = 0; public void run(){ while(true){ progressBar1.setValue(++count); try { threadA.sleep(100); threadB.join(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } } }); threadA.start(); threadB = new Thread(new Runnable(){ int count = 0; public void run(){ while(true){ progressBar2.setValue(++count); try { Thread.sleep(100); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } if(count == 100) break; } } }); threadB.start(); } public static void init(JFrame frame,int width,int height){ frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); frame.setSize(width, height); frame.setVisible(true); }}
下面来说下如何中断线程,可能首先回想到使用stop()方法,但现在提倡使用在RUN()方法中使用无限循环形式,然后使用一个布尔型标记控制循环的停止。
上栗子:
package com.xiancheng2.org;import java.awt.BorderLayout;import javax.swing.JFrame;import javax.swing.JProgressBar;public class InterruptedThread extends JFrame{ Thread thread; public static void main(String[] args){ init(new InterruptedThread(),100,100); } public InterruptedThread(){ super(); final JProgressBar progressBar = new JProgressBar(); getContentPane().add(progressBar, BorderLayout.NORTH); progressBar.setStringPainted(true); thread = new Thread(new Runnable() { int count = 0; @Override public void run() { // TODO Auto-generated method stub while(true){ progressBar.setValue(++count); try { Thread.sleep(100000); } catch (InterruptedException e) { // TODO: handle exception System.out.println("线程中断"); break; } } } }) ; thread.start(); thread.interrupt(); } public static void init(JFrame frame,int width,int height){ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(width, height); frame.setVisible(true); }}
See U~~
阅读全文
0 0
- JAVA之多线程(二)
- Java之多线程(二)
- JAVA之多线程(二)
- Java之多线程(二)
- Java基础之多线程二
- Java基础之多线程(二)
- java高级之多线程(二)
- Java基础知识之多线程(二)
- java之多线程(二)-线程的实现
- JAVA知识之多线程(二):生命周期和守护线程
- Java回炉之多线程(二)生产者与消费者
- Java中的多线程(二)之多线程同步
- 【Java基础之多线程】代码库(二)
- 黑马程序员——java基础拾遗之多线程(二) 线程同步、线程通信
- Java之多线程(一)
- JAVA之多线程(一)
- JAVA之多线程(三)
- Java之多线程(一)
- C++之值传递、指针传递和引用传递---补充(4)《Effective C++》
- USB总结
- MD5密码算法分析与实现
- 绘制小点
- Linux_入门之进程和系统服务的控制
- JAVA之多线程(二)
- spring基础
- java基础第一讲
- 欢迎使用CSDN-markdown编辑器
- 霍夫检测直线HoughLines和HoughLinesP
- 判断终端是pc还是mobile,返回值为number,0为pc,1为mobile,pc&mobile
- Sudoku Solver
- SGI STL(二)——C++ 语言特性
- js canvas 实现简单的加载条