什么是线程以及线程的使用+示例

2022-11-18 20:38:19 浏览数 (2)

目录

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();
	}

}

以下是效果图,运用了窗体美化包

以上就是今天的分享,谢谢大家的观赏!!!

0 人点赞