Java中的多线程机制

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、多线程机制的介绍-------->多段代码同时进行运行

如果一次只能完成一件事会很容易,但是现实生活中很多事情都是同时进行的所以Java中为了模拟这种状态,引入了线程机制。

世间万物都可以同时完成很多的工作,列如,人体可以同时进行呼吸、血液循环、思考问题等活动。用户可以在使用计算机的同时听音乐,也可以使用计算机看贴吧,而这些活动完全是可以同时进行,这种思想放在Java中被称为并发机制,而将这些并发完成的每一件事情称为线程。
在Java,并发机制非常重要,但并不是所有程序语言都支持多线程机制。在以往的程序中,多以一个任务完成在进行下一个项目的模式进行开发,这样下一个任务就必须等上一个任务完成才能进。Java语言提供了并发机制,程序员可以在程序中执行多个线程,每一个线程完成一个功能,并与其他线程并发进行,这种机制被称为多线程。
一个线程则是一个进程的执行流程,一个进程中也可以同时包含多个线程,每个线程也可以分配到小段程序的执行时间,这样一个线程就可以具有多个并发执行的线程。在单线程中,程序调用代码依次执行,如果需要一个进程同时完成多段代码就可以开多个线程
 

实现线程的两种方式

在Java中主要提供两种方式实现多线程机制,分别为继承java.lang.Thread类和实现java.lang.Runnable接口。

二、使用步骤

1.继承Thread类

Thread类是java.lang包中的一个类,从这个类中实例化的对象代表线程,程序员启动一个新线程就需要建立Tread实例。Thread类中常用的两种构造方法如下:

public Thread():创建一个新的线程对象
public Thread(String threadName):创建一个名称为threadName的线程对象
继承Thread类创建一个新的线程的语法如下:

public ThreadTest extends Thread{
//ThreadTest 这是小编取的一个类名可以为其他
}

完成线程的真正功能代码放在run()方法中,当类继承Thread类后就可以在该类中覆盖run()方法,将实现线程功能的代码写入run()方法中,然后同时在类中调用strat()方法启动线程。

注意:如果strat()方法调用一个已经启动的线程,程序就会抛出一个IllegaThreadStateExceptionl异常

Thread对象需要一个任务来执行,就是线程在启动时执行的工作,工作方式就是在run()方法中。run()方法语法格式
当执行一个线程程序时会自动,会自动启动一个线程给主方法运行,当不需要启动其他线程是,程序为单线程。主方法线程启动有Java虚拟机负责,程序员需要启动自己的线程。

例:

public class Test extends Thread{           //指定类继承Thread类
	private int count=10;
	public void run(){                      //重写run()方法
		while(true){
			System.out.print(count+" ");    //打印count变量
			if(--count==0){                 //使count变量自减,当自减为0时,退出循环
			return;
			}
		}
	}
	public static void main(String[] args){
	new Test().start;		//	启动线程
}

 多线程的创建 方式一:继承于Thread类
 1 创建一个继承于Thread类的子类
 2 重写Thread类的润run()
 3 创建Thread类的子类的对象
 4 通过此对象调用start()   启动当前线程 调用当前线程的run()

 测试Thread中的方法
 start():启动当前线程 调用当前线程的run()
 run(): 通常需要重写Thread类中的此方法 将创建的线程要执行的操作声明在此方法中
 currentThread():静态方法 返回执行当前代码的线程
 getName(): 获取当前线程的名字
 setName():设置当前线程的名字
 yield(): 释放当前cpu的执行权
 join():在线程a中调用线程b的join()方法  此时线程a就进入阻塞状态 直到线程b完全执行完以后 线程a才结束阻塞状态
 sleep(long millitime):让当前线程“睡眠”指定的毫秒数 在指定的毫秒时间内 当前线程是阻塞状  态
 isAlive(); 判断当前线程是否还存活

2.实现Runnable接口

当我们需要继承其他类(非Thread类),而且需要实现多线程就可以通过 Runnable 接口来实现。
实现 Runnable 接口的语法:

public class Thread extends Object implements Runnable
实现 Runnable 接口的程序会创建一个Thread 对象,并将 Runnable 对象与 Thread 对象相关联。Thread 类中有以下两种构造方法:

public Thread(Runnable target).
public Thread(Runnable target, String name)
使用 Runnable 接口启动新线程的步骤如下:
   1创建一个实现Runnable接口的类
*  2 实现类去实现Runnable接口的抽象方法run();
*  3 创建实现类的对象
*  4 将此对象作为参数传递到thread类的构造器中 创建thread类的对象
*  5 通过thread类的对象调用start
例:

import java.awt.Container;
import java.net.URL;
import java.swing.*;

public class SwingTest extends JFrame{
	private JLable jl = new JLable();	//声明JLable对象
	private static Thread t;	//声明线程对象
	private int count = 0;	//声明计数变量
	private Container coutainer = getContenPane();	//声明容器
	
	public SwingTest(){
		setBounds(300,200,250,100);	//决对定位窗体大小与位置
		coutainer.setLayout(null);	//使窗体不使用任何布局管理器
		URL url = SwingAndThread.class.getResource("/1.gif");	//获取图片URL
		Icon icon = new ImageIcon(url);	//实例化一个icon
		jl.setIcon(icon);	//将图标放置在标签中
		//设置图片在标签的最左方
		jl.setHorizontalAlignment(SwingConstans.LEFT);
		jl.setBounds(10,10,200,50);	//设置标签的大小与位置
		jl.setOpaque(true);
		t = new Thread(new Runnable){
			public void run(){	//复写run()方法
				while(count<=200){	//设置循环条件
					//将标签的横坐标用变量表示
					jl.setBounds(count,10,200,50);
					try{
						Thread.sleep(1000);	//使线程休眠
					}cath(Exception e){
						e.printStackTrace();
					}
					count+=4;	//横坐标每次自增4
					if(count==20){
						//当图标到达标签的最右边时,使其回到最左
						count = 10;
					}
				}
			}
		});
		t.start();	//启动线程
		container.add(jl);	//将标签添加到容器中
		setVisible(true);	//使窗体可见
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);	//设置窗体的关闭方式
	}
	public static void main(String[] args){
		new SwingTest();	//实例化一个SwingTest()对象
	}
}

该处使用的url网络请求的数据。


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值