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

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

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

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

相关文章
|
7月前
|
Linux C++
LInux下Posix的传统线程示例
LInux下Posix的传统线程示例
55 1
|
7月前
|
安全 Java
并发编程之常见线程安全类以及一些示例的详细解析
并发编程之常见线程安全类以及一些示例的详细解析
75 0
|
6月前
|
Java
死锁是线程间争夺资源造成的无限等待现象,Java示例展示了两个线程各自持有资源并等待对方释放,导致死锁。`
【6月更文挑战第20天】死锁是线程间争夺资源造成的无限等待现象,Java示例展示了两个线程各自持有资源并等待对方释放,导致死锁。`volatile`保证变量的可见性和部分原子性,确保多线程环境中值的即时更新。与`synchronized`相比,`volatile`作用于单个变量,不保证原子操作,同步范围有限,但开销较小。`synchronized`提供更全面的内存语义,保证原子性和可见性,适用于复杂并发控制。
48 3
|
5月前
|
网络协议 安全 Python
我们将使用Python的内置库`http.server`来创建一个简单的Web服务器。虽然这个示例相对简单,但我们可以围绕它展开许多讨论,包括HTTP协议、网络编程、异常处理、多线程等。
我们将使用Python的内置库`http.server`来创建一个简单的Web服务器。虽然这个示例相对简单,但我们可以围绕它展开许多讨论,包括HTTP协议、网络编程、异常处理、多线程等。
|
6月前
|
存储 Java
Java线程池参数详解及其示例
Java线程池参数详解及其示例
|
7月前
|
存储 Java
什么是线程池,线程池的状态,线程池的用法示例
什么是线程池,线程池的状态,线程池的用法示例
|
7月前
|
Python
Python中的多线程可以使用`threading`模块来实现。以下是一个简单的多线程示例,该示例启动两个线程并让它们分别打印数字。
在Python中,使用`threading`模块可实现多线程。以下代码展示了一个简单的例子:创建两个线程`t1`和`t2`,分别打印1-6和6-11的数字。通过`target`参数指定执行函数`print_numbers`,`args`传递参数。启动线程后,用`join()`确保线程执行完毕。注意,多线程访问共享资源可能引发数据竞争,需用锁进行同步控制。
58 0
|
Python
使用Python多线程的简单示例
使用Python多线程的简单示例
57 1