多线程学习笔记1 - Java

一、多线程创建方法
法1:继承Thread类来创建一个新线程

通过继承Thread类来创建一个线程,重写run方法。run方法就是该线程要执行的任务,即一条新的执行路径。

演示代码:

//声明一个子类MyThread继承父类Thread
public class MyThread extends Thread {
    @Override 重写run方法,内容是此线程要执行的任务。
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("锄禾日当午:" + i);
        }
    }
}
public class Demo1 {
	//这是里主线程的执行路径
    public static void main(String[] args) {
        MyThread m = new MyThread();
        m.start();	//调用start方法启动子线程
        for (int i = 0; i < 10; i++) {
            System.out.println("汗滴禾下土" + i);
        }
    }
}

主线程和子线程的执行先后顺序不一

法2:实现Runnable接口来创建一个新线程
//设置线程要执行的任务
public class MyRunnable implements Runnable {
    @Override 线程的任务
    public void run() {
        for (int i = 0; i < 10; i ++) {
            System.out.println("天气好" + i);
        }
    }
}
public class Demo2 {
    public static void main(String[] args) {
    	//1. 创建一个任务对象
        MyRunnable r = new MyRunnable();
        //2. 创建一个线程,并传入任务
        Thread t = new Thread(r);
        //3. 开始执行此线程
        t.start();

        for (int i = 0; i < 10; i ++) {
            System.out.println("我这边下雨呀" + i);
        }
    }
}
法3:使用Callable接口

不常用方式,以后补充。

二、Thread类常用方法
1、常用构造方法
  • Thread()
    分配一个Thread对象
  • Thread​(Runnable target)
    分配一个Thread对象,并指定任务
  • Thread​(Runnable target, String name)
    分配一个Thread对象,指定任务和线程名称
  • Thread​(String name)
    分配一个Thread对象,指定线程名称
2、常用方法
  • getId()
    获取线程ID

  • getName()
    获取线程名称

  • setName​(String name)
    设置线程名称。传入名称

  • int getPriority()
    获取线程优先级

  • start()
    启动线程

  • sleep​(long millis)
    即 public static void sleep​(long millis) throws InterruptedException
    线程休眠,传入要休眠的毫秒数

  • sleep​(long millis, int nanos)
    线程休眠,传入要休眠的毫秒+纳秒数

  • currentThread()
    即 public static Thread currentThread()
    返回当前正在执行的线程对象的引用

演示

public class MyRunnable implements Runnable {
    @Override 线程的任务
    public void run() { }
    }
}
public class Demo3 {
    public static void main(String[] args) {
        MyRunnable r = new MyRunnable();
        Thread t = new Thread(r);
        t.start();
        //获取线程ID
        System.out.println("线程ID: " + t.getId());
        //获取线程名称
        System.out.println("线程名称: " + t.getName());
        //设置线程名称
        t.setName("1号线程");
        System.out.println("线程名称: " + t.getName());
        //获取线程优先级,默认是5
        System.out.println("线程优先级: " + t.getPriority());
        

在这里插入图片描述

3、线程的结束

线程的结束 应由线程自身决定,不应使用stop方法强制中断线程,否则会导致线程占用的资源来不及释放

ublic class Demo3 {
    public static void main(String[] args) {
        Thread t1 = new Thread(new MyRunnable2());
        t1.start();

        for (int i = 0; i < 5; i++) {
            //调用currentThread()获取当前正在执行的线程的引用
            System.out.println(Thread.currentThread().getName() + ":" + i);
            try {
                Thread.sleep(1000);	//休眠1秒
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        //给线程1添加中断标记
        t1.interrupt();
    }

    static class MyRunnable2 implements Runnable {

        public void run() {
            for (int i = 0; i < 10; i++) {
                System.out.println(Thread.currentThread().getName() + ":" + i);
                try {
                    Thread.sleep(1000);
                } catch(InterruptedException e) {
                    //System.out.println("发现了中断标记,但不死亡");
                    System.out.println("发现了中断标记,执行线程自杀");
                    return;
                }
            }
        }

    }
}

在这里插入图片描述
上述代码中,子线程并没有执行完for loop。

主线程和子线程每隔1秒打印一次。在主线程执行完for loop打印后,设置中断标记。当子线程发现中断标记后,就会结束run方法,释放资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在风能领域,准确预测风速对于风电场的运行与管理至关重要。Matlab作为一个强大的数学计算和数据分析平台,被广泛应用于风速预测模型的构建。本文将深入探讨基于四种风速——随机风、基本风、阵风和渐变风的组合风速预测技术。 我们来理解这四种风速类型: 1. **随机风**:随机风是指风速呈现出随机性的变化,通常由大气湍流引起。在建模中,通常通过统计方法如高斯分布或Weibull分布来模拟这种不确定性。 2. **基本风**:基本风速是指在无特定扰动条件下的平均风速,它是长期观测结果的平均值,通常用于结构设计和风能评估。 3. **阵风**:阵风是短时间内风速显著增强的现象,对建筑物和风力发电机造成的主要威胁之一。阵风的预测涉及到风的脉动特性分析。 4. **渐变风**:渐变风是指风速随时间和空间逐渐变化的过程,常见于风向转变或地形影响下的风场变化。 在Matlab中,利用这四种风速类型进行组合预测,可以提高预测的准确性。预测模型可能包括以下几个步骤: 1. **数据收集与预处理**:收集历史风速数据,包括随机风、基本风、阵风和渐变风的数据,进行异常值检测、缺失值填充以及数据标准化。 2. **特征工程**:提取风速变化的相关特征,如平均值、标准差、极值、频率分布等,这些特征可能对预测有重要影响。 3. **模型选择**:可以选择多种预测模型,如时间序列分析(ARIMA、状态空间模型等)、机器学习算法(线性回归、决策树、支持向量机、神经网络等)或深度学习模型(LSTM、GRU等)。 4. **模型训练**:利用历史数据训练选定的模型,调整模型参数以优化性能,例如通过交叉验证来避免过拟合。 5. **模型验证与评估**:使用独立的测试集验证模型预测效果,常见的评估指标有均方误差(MSE)、平均绝对误差(MAE)和决定系数(R²)。 6. **组合预测**:结合四种风速的不同模型预测结果,可以采用加权平均、集成学习(如bagging、boosting)等方式,以提升整体预测精度。 7. **实时更新与动态调整**:实际应用中,模型需要不断接收新的风速数据并进行在线更新,以适应风场环境的变化。 通过以上步骤,可以构建一个综合考虑各种风速特性的预测系统,这对于风电场的功率输出预测、风电设备的维护计划以及电网调度都具有重要价值。然而,需要注意的是,每个风场的地理环境、气候条件和设备状况都有所不同,因此模型的建立应根据实际情况进行定制和优
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值