目录
1、实现线程的三种方式
2、线程的运用
常用函数:
效果展示
以下是效果图,运用了窗体美化包
1、实现线程的三种方式
继承 Thread类,并重写run()方法; 实现 Runnable接口,并重写run()方法; 实现 Callable接口,并重写call()方法;
五大状态:新建、就绪、运行、阻塞、死亡;
2、线程的运用
什么是线程?
程序中负责执行的哪个东东就叫做线程(执行路线,进程内部的执行序列),或者说是进程的子任务。
常用函数:
sleep():设置线程休眠时间,单位毫秒; yield():方法是停止当前线程,让同等优先权的线程运行,如果没有同等优先权的线程,那么Yield()方法将不会起作用。该方法与sleep()类似,只是不能由用户指定暂停多长时间,该方法执行后线程直接进入就绪状态。 join():执行后线程进入阻塞状态,例如在线程B中调用线程A的join(),那线程B会进入到阻塞队列,直到join结束或中断线程B才开始进入阻塞队列。 wait():让线程处于等待状态,并且释放掉抢到的锁旗标,其他线程可以继续抢锁旗标。wait()必须在同步的代码块中执行。
案例一:创四个方法,再进行调用,四个方法哪一个方法抢到了CPU就执行那个
代码语言:javascript复制package com.zking.ui;
public class Test {
public static void main(String[] args) {
//实例化线程对象
MyThread1 m1 = new MyThread1();
MyThread1 m2 = new MyThread1();
//m1.run();//错误的使用线程方法
//启用线程
m1.start();
m2.start();
//Runnable方式实现线程
//创建任务对象
MyRunnable m = new MyRunnable();
//创建线程
Thread t1 = new Thread(m);
t1.start();
}
}
效果展示
案例二:(希望不会挨打)大多数人都喜欢玩游戏,玩游戏的时候会有抽奖,并且抽中的概率是很小的,以下是一个老虎机游戏
代码语言:javascript复制package com.zking.ui;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
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.UIManager;
public class Game_UI extends JFrame{
boolean b = true;
JPanel jp = new JPanel();
//第一张图
ImageIcon ia = new ImageIcon("D:\S2\丹哥\API_07\images\a3.gif");
JLabel jla = new JLabel(ia);
// 第一张图
// ImageIcon ib = new ImageIcon("D:\S2\丹哥\API_07\images3.gif");
JLabel jlb = new JLabel(ia);
// 第一张图
// ImageIcon ic = new ImageIcon("D:\S2\丹哥\API_07\images3.gif");
JLabel jlc = new JLabel(ia);
//第一个按钮
JButton jbyyy = new JButton("摇一摇");
JButton jbtyt = new JButton("停一停");
public Game_UI() {
this.setTitle("老虎机");
this.setSize(420,350);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
// 设置空布局
jp.setLayout(null);
// 第一张图片的位置
jla.setBounds(60, 70, 64, 50);
// 添加到画布上
jp.add(jla);
// 第二张图片的位置
jlb.setBounds(170, 70, 64, 50);
// 添加到画布上
jp.add(jlb);
// 第三张图片的位置
jlc.setBounds(280, 70, 64, 50);
// 添加到画布上
jp.add(jlc);
jbyyy.setBounds(60, 180, 100, 40);
jp.add(jbyyy);
jbtyt.setBounds(220, 180, 100, 40);
jp.add(jbtyt);
jbyyy.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
b = true;
new Thread() {
int i = 500;
public void run() {
while(true) {
//随机1-4中间的一个数字
setJlImage(jla);
setJlImage(jlb);
setJlImage(jlc);
if(b) {
i-=50;
if(i<=1) {
i=1;
}
}else {
i =10;
if(i>=500) {
break;
}
}
try {
Thread.sleep(i);
} catch (Exception e2) {
e2.printStackTrace();
}
}
};
}.start();
}
});
jbtyt.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
b = false;
}
});
this.getContentPane().add(jp);
this.setVisible(true);
}
private void setJlImage(JLabel jl) {
// TODO Auto-generated method stub
Random ran = new Random();
int i = ran.nextInt(4) 1;
//创建图片
ImageIcon ii = new ImageIcon("D:\S2\丹哥\API_07\images\a" i ".gif");
jl.setIcon(ii);
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel("org.jb2011.lnf.beautyeye.BeautyEyeLookAndFeelCross");
} catch (Exception e) {
e.printStackTrace();
}
new Game_UI();
}
}