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的主要内容,如果未能解决你的问题,请参考以下文章