java复习---多线程

本文深入介绍了Java中的线程和进程概念,包括线程的创建(通过Thread子类和Runnable接口)、进程的定义及其组成部分。通过示例展示了线程的启动与执行流程,解释了线程间的同步与互斥,特别是Java中的`synchronized`关键字在临界区的应用。同时,文章还探讨了线程间的联合操作如`join()`方法,以及线程间制约关系的实现方式。
创建方法

自定义Thread类的子类
自定义类实现Runnable接口

进程的定义

进程(process)是在一个数据集合上的
一次动态的执行过程,资源分配的基本单位

基本概念

包括pcb,数据段,代码段

基本状态:就绪/运行/阻塞

区别
程序是一段静态的代码,它是应用软件执行的蓝本。
进程是程序的一次动态执行过程
线程是比进程更小的执行单位。一个进程在其执行过程中,可以产生多个线程

java中的线程

Java应用程序总是从主类的main方法开始执行。JVM加载代码发现main后,就会启动一个主线程,该线程负责执行main方法;
若main方法中创建其他线程,则JVM在主线程和其他线程之间轮流切换,保证每个线程都有机会使用CPU资源;main方法即使执行完最后语句,JVM也要等所有线程都结束才结束整个Java程序。

过程

运行
线程调用***start()方法,通知JVM,JVM知道新线程排队等候切换;当此线程***获得CPU使用权后,执行线程的run()方法进行动作
等待:线程执行***wait()***方法,

例子

线程类有一个构造函数设置名字,有一个run函数设置内容
注意:
Thread大写
setName大写
for循环要写在线程类中
error:自己写个新的按顺序运行了??

class WriteWordThread extends Thread{      //Thread的子类负责创建线程对象
    WriteWordThread(String s){
        setName(s);                        //调用Thread类的setName方法为线程起个名字
    }
    public void run(){
        for(int i=1;i<=8;i++){
           System.out.println("我是一个线程,我的名字是"+getName());
        }
    }
}

主函数创建对象,调用start方法

public class Example8_1{
    public static void main(String args[ ]){
        WriteWordThread  zhang,wang;
        zhang=new WriteWordThread("张小红");        //新建线程
        wang=new WriteWordThread("JamsKeven");     //新建线程
        zhang.start();                               //启动线程
        for(int i=1;i<=8;i++){
           System.out.println("我是主线程中的语句");
        }  
        wang.start();                               //启动线程
   }
}

运行结果是三种输出轮流进行

实现runnable接口
class Bank implements Runnable{      //Bank类必须实现Runnable接口
    private int money=0;
    String name1,name2;
    Bank(String s1,String s2){
        name1=s1;
        name2=s2;
    } 
    public void setMoney(int mount){
        money=mount;
    }
public class Example8_4{
    public static void main(String args[ ]){
        String s1="会计",s2="出纳"; 
        Bank bank=new Bank(s1,s2);
        Thread zhang,cheng;
        zhang=new Thread(bank);
        cheng=new Thread(bank);    //cheng和zhang是同一目标对象 
        zhang.setName(s1);
        cheng.setName(s2);
        bank.setMoney(120);     //线程的目标对象修改被线程共享的money
        zhang.start();
        cheng.start();
    }
}
临界区

Java使用***synchronized***关键词标识临界区(同步的)

联合

线程A在占有CPU资源期间一旦联合B线程,那么A线程将立刻中断执行,一直等到它联合的线程B执行完毕,A线程再重新排队等待CPU资源,以便恢复执行
***B.join()***–联合

线程之间的制约关系

1线程的同步(消费者生产者)
2线程的互斥

基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)内容概要:本文围绕“基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究”,介绍了利用Matlab代码实现配电网可靠性的仿真分析方法。重点采用序贯蒙特卡洛模拟法对配电网进行长时间段的状态抽样与统计,通过模拟系统元件的故障与修复过程,评估配电网的关键可靠性指标,如系统停电频率、停电持续时间、负荷点可靠性等。该方法能够有效处理复杂网络结构与设备时序特性,提升评估精度,适用于含分布式电源、电动汽车等新型负荷接入的现代配电网。文中提供了完整的Matlab实现代码与案例分析,便于复现和扩展应用。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及电力行业技术人员,尤其适合从事配电网规划、运行与可靠性分析相关工作的人员; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的基本原理与实现流程;②学习如何通过Matlab构建配电网仿真模型并进行状态转移模拟;③应用于含新能源接入的复杂配电网可靠性定量评估与优化设计; 阅读建议:建议结合文中提供的Matlab代码逐段调试运行,理解状态抽样、故障判断、修复逻辑及指标统计的具体实现方式,同时可扩展至不同网络结构或加入更多不确定性因素进行深化研究。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值