目录
1、实现线程的三种方式
2、线程的运用
1、实现线程的三种方式
继承 Thread类,并重写run()方法;
实现 Runnable接口,并重写run()方法;
实现 Callable接口,并重写call()方法;
五大状态:新建、就绪、运行、阻塞、死亡;
2、线程的运用
常用函数:
sleep():设置线程休眠时间,单位毫秒;
yield():方法是停止当前线程,让同等优先权的线程运行,如果没有同等优先权的线程,那么Yield()方法将不会起作用。该方法与sleep()类似,只是不能由用户指定暂停多长时间,该方法执行后线程直接进入就绪状态。
join():执行后线程进入阻塞状态,例如在线程B中调用线程A的join(),那线程B会进入到阻塞队列,直到join结束或中断线程B才开始进入阻塞队列。
wait():让线程处于等待状态,并且释放掉抢到的锁旗标,其他线程可以继续抢锁旗标。wait()必须在同步的代码块中执行。
以下是第一个小案例
创四个方法,再进行调用,四个方法哪一个方法抢到了CPU就执行那个
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(); } }
下面是一个效果展示
第二个小案例:(希望不会挨打)大多数人都喜欢玩游戏,玩游戏的时候会有抽奖,并且抽中的概率是很小的,以下是一个老虎机游戏
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\\images\3.gif");
JLabel jlb = new JLabel(ia); // 第一张图 // ImageIcon ic = new
ImageIcon("D:\\S2\\丹哥\\API_07\\images\3.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(); } }
这是他的效果图,运用了窗体美化包
以上就是今天的分享