Java多线程01

Posted xingweikun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java多线程01相关的知识,希望对你有一定的参考价值。

线程概述

人们在日常生活中,很多事情都是可以同时进行的。例如,一个人可以一边听音乐,一边打扫房间。在使用计算机时,很多任务也是可以同时进行的。例如,可以一边浏览网页,一边打印文档等。计算机这种能够同时完成多项任务的技术,就是多线程技术。Java是支持多线程的语言之一,它内置了对多线程技术的支持,可以使用程序同时执行多个执行片段。

进程

在一个操作系统中,每个独立执行的程序都可称为一个进程,也就是“正在运行的程序”。
在这里插入图片描述

线程

每个运行的程序都是一个进程,在一个进程中还可以有多个执行单元同时运行。这些执行单元可以看作程序执行的一条条线索,被称为线程。
多线程是指一个进程在执行过程中可以产生多个单线程,这些单线程程序在运行时是相互独立的,它们可以并发执行。
在这里插入图片描述

线程的创建

继承Thread类创建多线程

package 多线程;

public class Example01 {

	public static void main(String[] args) {
		MyThread myThread = new MyThread();
		// 调用MyThread类的run方法。不停止程序,程序就会一直运行
		myThread.run();
		while (true) {
			System.out.println("Main方法在运行");
		}

	}
}

class MyThread {
	public void run() {
		while (true) {
			System.out.println("MyThread类的run方法在运行");
		}
	}
}

在这里插入图片描述

package 多线程;

public class Example01 {

	public static void main(String[] args) {
		MyThread myThread = new MyThread();
		// 开启线程
		myThread.start();
		while (true) {
			System.out.println("Main方法在运行");
		}

	}

}

class MyThread extends Thread {
	public void run() {
		while (true) {
			System.out.println("MyThread类的run方法在运行");
		}
	}
}

在这里插入图片描述
在这里插入图片描述

package 多线程;

public class ThreadTest extends Thread {
	private int count = 10;

	public void run() {
		while (true) {
			System.out.print(count + " ");
			if (--count == 0) {
				return;
			}
		}
	}

	public static void main(String[] args) {
		new ThreadTest().start();

	}

}

在这里插入图片描述

实现Runnable接口创建多线程

package 多线程;

public class Example01 {

public static void main(String[] args) {
		MyThread myThread = new MyThread();
		Thread thread =new Thread(myThread);
	// 开启线程
		thread.start();
	while (true) {
			System.out.println("Main方法在运行");
		}

	}

}

class MyThread implements Runnable {
	public void run() {
		while (true) {
			System.out.println("MyThread类的run方法在运行");
		}
	}
}

在这里插入图片描述

package 多线程;
/*
 * 实现Runnable接口
 * */
import java.awt.*;
import java.net.*;

import javax.swing.*;

public class SwingAndThread extends JFrame {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JLabel jl = new JLabel(); // 声明JLabel对象
	private static Thread t; // 声明线程对象
	private int count = 0; // 声明计数变量
	private Container container = getContentPane(); // 声明容器

	public SwingAndThread() {
		setBounds(300, 200, 250, 100); // 绝对定位窗体大小与位置
		container.setLayout(null); // 使窗体不使用任何布局管理器

		Icon icon = new ImageIcon("D:/workspace/Learn/src/多线程/1.gif"); // 实例化一个Icon
		jl.setIcon(icon); // 将图标放置在标签中
		// 设置图片在标签的最左方
		jl.setHorizontalAlignment(SwingConstants.LEFT);
		jl.setBounds(10, 10, 200, 50); // 设置标签的位置与大小
		jl.setOpaque(true);
		t = new Thread(new Runnable() { // 定义匿名内部类,该类实现Runnable接口
			public void run() { // 重写run()方法
				while (count <= 200) { // 设置循环条件
					// 将标签的横坐标用变量表示
					jl.setBounds(count, 10, 200, 50);
					try {
						Thread.sleep(1000); // 使线程休眠1000毫秒
					} catch (Exception e) {
						e.printStackTrace();
					}
					count += 4; // 使横坐标每次增加4
					if (count == 200) {
						// 当图标到达标签的最右边,使其回到标签最左边
						count = 10;
					}
				}
			}
		});
		t.start(); // 启动线程
		container.add(jl); // 将标签添加到容器中
		setVisible(true); // 使窗体可视
		// 设置窗体的关闭方式
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
	}

	public static void main(String[] args) {
		new SwingAndThread(); // 实例化一个SwingAndThread对象
	}
}

在这里插入图片描述
在这里插入图片描述

模拟窗口发票

package 多线程;
/*
 * 模拟窗口售票
 * */
public class Example01 {

	public static void main(String[] args) {
		TicketWindow task = new TicketWindow();
		new Thread(task, "窗口1").start();
		new Thread(task, "窗口2").start();
		new Thread(task, "窗口3").start();
		new Thread(task, "窗口4").start();

	}

}

class TicketWindow implements Runnable {
	private int tickets = 100;

	public void run() {
		while (true) {
			if (tickets > 0) {
				Thread th = Thread.currentThread();
				String th_name = th.getName();
				System.out.println(th_name + "正在发售第" + tickets-- + "张票");
			}
		}
	}
}

在这里插入图片描述

以上是关于Java多线程01的主要内容,如果未能解决你的问题,请参考以下文章

Java多线程与并发库高级应用-工具类介绍

Java多线程与并发库高级应用-工具类介绍

多线程 Thread 线程同步 synchronized

20160226.CCPP体系详解(0036天)

Java多线程具体解释

自己开发的在线视频下载工具,基于Java多线程