提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
文章目录
前言
一、多线程机制的介绍-------->多段代码同时进行运行
实现线程的两种方式
二、使用步骤
1.继承Thread类
2.实现Runnable接口
总结
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
如果一次只能完成一件事会很容易,但是现实生活中很多事情都是同时进行的所以Java中为了模拟这种状态,引入了线程机制。
世间万物都可以同时完成很多的工作,列如,人体可以同时进行呼吸、血液循环、思考问题等活动。用户可以在使用计算机的同时听音乐,也可以使用计算机看贴吧,而这些活动完全是可以同时进行,这种思想放在Java中被称为并发机制,而将这些并发完成的每一件事情称为线程。
在Java,并发机制非常重要,但并不是所有程序语言都支持多线程机制。在以往的程序中,多以一个任务完成在进行下一个项目的模式进行开发,这样下一个任务就必须等上一个任务完成才能进。Java语言提供了并发机制,程序员可以在程序中执行多个线程,每一个线程完成一个功能,并与其他线程并发进行,这种机制被称为多线程。
一个线程则是一个进程的执行流程,一个进程中也可以同时包含多个线程,每个线程也可以分配到小段程序的执行时间,这样一个线程就可以具有多个并发执行的线程。在单线程中,程序调用代码依次执行,如果需要一个进程同时完成多段代码就可以开多个线程
在Java中主要提供两种方式实现多线程机制,分别为继承java.lang.Thread类和实现java.lang.Runnable接口。
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(); 判断当前线程是否还存活
当我们需要继承其他类(非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提供了大量能使我们快速便捷地处理数据的函数和方法。