精华内容
下载资源
问答
  • 栈用于存放程序运行过程中所有局部变量,一个运行java程序,从开始到结束会有多次方法的调用。 JVM会为每一个方法的调用在栈中分配一个对应空间,这个空间成为该方法栈桢,一个栈桢对应一个正在调用的方法...

    JVM会在其内存空间中开辟一个称为 堆 的存储空间,这部分空间用于存储使用new关键字 创建的对象。

    栈用于存放程序运行过程中所有的局部变量,一个运行的java程序,从开始到结束会有多次方法的调用。

    JVM会为每一个方法的调用在栈中分配一个对应的空间,这个空间成为该方法的栈桢,一个栈桢对应一个正在调用的方法。

    栈桢中存储了该方法的参数,局不变量等数据。当某一个方法调用完成后,其 对应的栈桢会白 清除 。

    方法区存放类的信息,java程序运行时,首先会通过类装载器载入类文件的字节码信息,经过解析后把装入方法区,

    类的各种信息都在方法区保存。

    展开全文
  • 数据结构实验

    2012-04-13 09:55:47
    1.学会定义线性表的顺序存储类型,实现C程序的基本结构,对线性表的一些基本操作和具体的函数定义。 2.掌握顺序表的基本操作,实现顺序表的插入、删除、查找以及求并集等运算。 3.掌握对函数程序的输入、编辑、...
  • 进程:是计算机中的程序关于数据集合的一运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础,进程是线程的容器,进程是程序的实体。进程中可以容纳若干个线程。 线程:是轻量级的进程,是...

    Java并行程序基础

    进程:是计算机中的程序关于某数据集合的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础,进程是线程的容器,进程是程序的实体。进程中可以容纳若干个线程。
    线程:是轻量级的进程,是程序执行的最小单位,使用多线程而不使用多进程进行并发程序的设计,是因为线程的切换和调度成本远小于进程。
    线程的所有状态在Thread中的State枚举中定义:

    public enum State{
    	NEW,//线程刚刚创建 还没开始执行,等到start()方法调用时开始执行
    	RUNNABLE,//程序执行状态,程序所需一切资源已经准备好
    	BLOCKED,//执行过程中遇到了synchronized同步块就会阻塞,此时会暂停执行,直到获得请求的锁
    	WAITING,//无时间限制的等待
    	TIMED_WAITING,//等待一些特殊事件
    	TERMINATED;//结束
    }
    

    初始线程:线程的基本操作

    1.新建线程

    1.继承Thread,重载run()方法定义线程
    2.实现Runnable接口

    2.终止线程

    Thread.stop()会直接终止线程,并立即释放这个线程所持有的锁,若有的锁用来维持对象一致性,那么会导致数据不一致情况出现。
    所以需要自定义标记变量判断线程是否需要退出。

    3.线程中断

    线程中断不会使线程立马退出,而是给线程发送一个通知,告知目标线程有请求需要它退出,至于如何处理由目标线程决定。

    public void Thrad.interrupt();//中断线程
    public boolean Thread.isInterrupted();//判断是否被中断
    public static boolean Thread.interrupted();//判断是否被中断并清除当前中断状态
    

    Thread.sleep()让当前线程休眠若干时间,会抛出InterruptedException中断一次。由于中断而抛出异常,此时会清除中断标记,如果此时不加处理,下一次循环开始时就无法捕获这个异常,需要在异常处理中再此设置中断标志位。不会释放锁资源

    4.等待(wait)和通知(notify)

    都是Object类的方法。
    wait():一个对象调用后会停止继续执行,转为等待状态。等到其他线程调用了notify()方法为止。他必须在synchronzied语句中,会释放锁
    一个线程调用了obj.wait()后,它就会进入obj对象的等待队列,这个等待队列可能有多个线程,因为系统运行多个线程同时等待某一个对象,当调用obj.notify()时,会从等待队列中随机唤醒一个线程。
    notify()/notifyAll():随机唤醒一个或全部线程。
    无论wait或notify方法,都需要首先获得目标对象的一个监视器,wait执行完后会释放这个监视器。

    5.挂起(suspend)和继续执行(resume)线程

    被挂起的线程必须等到resume()操作后才能继续执行。
    suspend()不会释放任何锁资源

    6.等待线程结束(join)和谦让(yield)

    join():一直阻塞当前线程知道目标线程执行完毕
    join()的本质是wait()实现的,所以也会释放锁
    yield():一旦执行,它会使当前线程让出CPU

    线程组

    线程较多时,线程功能分配比较明确,就可以将相同功能的线程放在一个线程组里。

    ThreadGroup tg=new ThreadGroup("PrintGroup");
    Thread t1=new Thread(tg,new ThreadGroupName(),"T1");
    Thread t2=new Thread(tg,new ThreadGroupName(),"T2");
    t1.start();
    t2.start();
    System.out.println(tg.activeCount());//获得活动线程的总数
    tg,list();//打印这个线程组的所有线程信息
    

    守护线程( Daemon )

     public static class DaemonT extends Thread{
            public void run()
            {
                while(true)
                {
                    System.out.println("I am alive");
                    try{
                        Thread.sleep(1000);
                    }catch (InterruptedException e)
                    {
                        e.printStackTrace();
                    }
                }
            }
        }
        public static void main(String [] args) throws InterruptedException {
            Thread t=new DaemonT();
            t.setDaemon(true);//设置守护线程必须在线程start()之前
            t.start();
            Thread.sleep(2000);//方法中只有主线程main是用户线程 在main线程休眠2秒后退出
        }
    

    线程优先级

    t.setPriority(Thread.MAX_PRIORITY);
    

    线程安全与synchronized

    volatile只能保证一个线程修改数据后其他线程能够看到这个改动,但两个线程同时操作一个数据就会产生冲突。
    synchronized的作用是实现线程间的同步,对同步的代码加锁,使得每次只有一个线程进入同步块,从而保证线程间的安全。可以保证线程间的可见性和有序性
    synchronized用法:
    指定加锁对象:给指定对象加锁,进入同步代码前需要获得给定对象的锁
    直接作用于实例方法:相当于对当前实例加锁,进入同步代码前需要获得当前实例的锁
    直接作用于静态方法:相当于对当前类加锁,进入前要获得类的锁

    隐蔽性的错误

    1.并发下的ArrayList
    在扩容过程中,内部一致性遭到破坏,由于没有锁的保护,导致另一个线程访问到不一致的内部状态,出现越界问题。
    多线程访问冲突,两个线程同时对ArrayList中的同一位置进行赋值,可用Vector替代即可解决。
    2.并发下的HashMap
    链表结构遭到破坏变成环了。

    i++的本质是创建一个新的Integer对象,并将他的引用赋值给i。

    展开全文
  • 实例227 防止程序多次运行 317 实例228 开机后程序自动运行 319 实例229 获取任务栏尺寸大小 320 实例230 改变系统提示信息 321 实例231 获取系统环境变量 322 实例232 启动屏幕保护 323 7.11 系统隐藏...
  • Python从入门到上瘾11——函数(上) ...函数可以多次调用,不必重复写同一代码,使用函数可以使程序结构更加清晰! 定义函数 函数以 def 关键词开头,后接圆括号 (),圆括号之间用于定义参数。函数主题...

    版权申明:原创文章,未经博主同意,不得转载!

    Python从入门到上瘾11——函数(上)

    小白高效学习Python系列,50小时学会Python “ 阅读本文需要大约5分钟。”

    几乎任何一门语言都有函数这个概念。所谓函数是指将实现某一功能的代码段提取出来,形成函数。函数可以多次调用,不必重复写同一代码,使用函数可以使程序结构更加清晰!

    定义函数

    函数以 def 关键词开头,后接圆括号 (),圆括号之间用于定义参数。函数主体以冒号:开始。
    以 return [表达式] 结束函数,返回函数值。若没有return相当于返回 None,格式如下:

    def 函数名(参数列表):
        函数体
    

    简单函数示例:

    def hello() :
      print("Hello World!")
    
    hello()    # 调用函数
    # 输出结果为:‘Hello World!’
    

    调用函数

    实际上,上面代码已经调用了函数hello()。当完成函数的定义以后,可以通过调用的方式来使用函数。如下实例两次调用了 func() 函数:

    # 定义函数
    def func(str):
        # 打印任何传入的字符串
        print(str)
        return
    
    # 调用函数
    func("调用函数func()!")
    func("再次调用同一函数func()!")
    
    #输出结果:
    #调用函数func()!
    #再次调用同一函数func()!
    

    函数的参数

    在调用函数时,常常需要向函数传递参数。函数参数是函数的重要组成部分。Python中的函数参数可以分为以下四类。

    • 必需参数

    • 关键字参数

    • 默认参数

    • 不定长参数

    • 必需参数

    必需参数,也叫位置参数,须以正确的顺序以及数量传入函数。

    例如在调用 func() 函数,你必须传入一个参数,否则会出现语法错误:

    # 定义函数
    def func(str):
        # 打印任何传入的字符串
        print(str)
        return
    
    # 调用函数,未正确传入参数,会报错
    func()
    
    #报错如下
    #TypeError: func() missing 1 required positional argument: 'str'
    

    可以看到,上述代码中的函数func(str)的参数str即为必须参数

    • 关键字参数

    关键字参数是利用关键字匹配来确定传入函数的参数顺序,因此使用关键字参数允许函数调用时参数的顺序与声明时不一致。

    def func( name, age ):
       print ("名字: ", name)
       print ("年龄: ", age)
       return
     
    #调用func函数
    func( age=18, name="MotherBoard" )
    
    #以上实例输出结果:
    #名字:  MotherBoard
    #年龄:  18
    

    可以看到,通过关键字匹配,传入函数的参数顺序可与申明时不一致。

    • 默认参数

    调用函数时,如果没有传递参数,则会使用默认参数。以下实例中如果没有传入 age 参数,则使用默认值:

    def func( name, age =22 ):
       print ("名字: ", name)
       print ("年龄: ", age)
       return
     
    #调用func函数
    func( name="MotherBoard" )  
    
    #以上实例输出结果:
    #名字:  MotherBoard
    #年龄:  22
    

    可以看到,age因为未传入参数赋值,使用了默认值‘22’。

    • 不定长参数

    还有一种参数叫做不定长参数。
    若不定长参数以 * 进行标识,则在调用函数时,如果依次将所有其他参数都赋值后,还有参数,则将剩下的参数收集在一个元组
    示例如下:

    def func( arg1, *vartuple ):
       print ("输出: ")
       print (arg1)
       print (vartuple)
     
    func( 70, 60, 50 )
    
    #以上实例输出结果:
    #70
    #(60, 50)
    

    可以看到,上述代码在函数调用时,将多出来的参数存放在元组vartuple中。如果没有多出来的参数,vartuple就是一个空元组。

    *若不定长参数以 * * 进行标识,则在调用函数时,如果依次将所有其他参数都赋值后,还有参数,则将剩下的参数收集在一个字典。*示例如下:

    def func( arg1, **vardict ):
       print ("输出: ")
       print (arg1)
       print (vardict)
       
    func(1, a=2,b=3)
    
    #以上实例输出结果:
    
    #1
    #{'a': 2, 'b': 3}
    

    可以看到,上述代码在函数调用时,将多出来的参数存放在字典vardict中。如果没有多出来的参数,vardict就是一个空字典。

    • 本期到此结束,关注本人公众号,一起学习进步!

    在这里插入图片描述

    展开全文
  • 函数是C源程序的基本模块, 通过对函数模块的调用实现特定的功能。C语言中的函数相当于其它高级语言的子程序。 C语言不仅提供了极为丰富的库函数(如Turbo C,MS C 都提供了三百个库函数),还允许用户建立自己...
  • 模拟电梯系统程序设计

    热门讨论 2010-07-12 17:28:06
    要求重点要实现顺便服务策略,应在一相对独立的程序块中实现控制策略,这样能方便地对其进行修改而不影响程序的其他部分。 (四)输入输出 1)输入: 就是一系列的呼叫和目标。输入可以采用两种方法: a.以键盘...
  • 20.15 执行客户端可执行程序 20.16 自动调用OutLook发送邮件 20.17 弹出窗口选择颜色 20.18 弹出框式邮件发送 20.19 把网站作为用户Active桌面 20.20 判断是否安装了flash插件 第21章 流行技术:DOM和userData...
  •  静态编译后易语言可执行程序(exe)和动态链接库(dll),运行时不再依赖任何支持库文件,文件尺寸更小(相对以前独立编译),PE结构更合理(取消了“易格式体”),加载速度更快,而且有效解决了“病毒误报”和...
  • 《数据结构 1800题》

    热门讨论 2012-12-27 16:52:03
    12. 数据结构的基本操作设置最重要准则是,实现应用程序与存储结构的独立。( ) 【华南理工大学 2002 一、5(1分)】 13. 数据逻辑结构说明数据元素之间顺序关系,它依赖于计算机储存结构. ( ) ...
  • 程序开发范例宝典>>

    2012-10-24 10:41:28
    表技术、硬件相关开发技术、网络开发技术、Web编程、加密、安全与软件注册、数据结构与算法、C#高级开发、实用工具、程序打包等共21章,572个实例。  本书附有配套光盘。光盘提供了书中所有实例源代码,全部源...
  • 通过实现继承与态性,还可以大大提高程序的可重用性,使得软件的开发和维护都更为方便。 面向对象方法所强调的基本原则,就是直接面对客观存在的事物来进行软件开发,将人们在日常生活中习惯的思维方式和表达方式...
  • Java范例开发大全 (源程序

    热门讨论 2011-04-27 07:47:22
     实例202 程序的退出 352  实例203 获取程序运行环境的信息 353  第4篇 Java高级开发技术  第12章 集合(教学视频:45分钟) 358  12.1 Set 358  实例204 利用HashSet删除学生 358  实例205 不重复的...
  • C#程序开发范例宝典(第2版).part02

    热门讨论 2012-11-12 07:55:11
    一部久享盛誉的程序开发宝典。精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心...实例267 防止程序多次运行 363 实例...
  • C#程序开发范例宝典(第2版).part13

    热门讨论 2012-11-12 20:17:14
    一部久享盛誉的程序开发宝典。精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心...实例267 防止程序多次运行 363 实例...
  • 一部久享盛誉的程序开发宝典。精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心...实例267 防止程序多次运行 363 实例...
  • 一部久享盛誉的程序开发宝典。精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心...实例267 防止程序多次运行 363 实例...
  • Java范例开发大全(全书源程序

    热门讨论 2013-04-05 11:50:26
    实例202 程序的退出 352 实例203 获取程序运行环境的信息 353 第4篇 Java高级开发技术 第12章 集合(教学视频:45分钟) 358 12.1 Set 358 实例204 利用HashSet删除学生 358 实例205 不重复的随机数序列 360 ...
  • 实例267 防止程序多次运行 363 实例268 程序运行时禁止关机 364 实例269 获取任务栏尺寸大小 365 实例270 改变系统提示信息 366 实例271 获取系统环境变量 367 实例272 启动屏幕保护 368 7.11 系统隐藏 369 实例273 ...
  • C#程序开发范例宝典

    2010-12-15 20:05:16
    实例018 类似Windows Xp的程序界面...... 18 实例019 以图形按钮显示界面...... 20 实例020 以树形显示的程序界面...... 21 实例021 动态按钮窗体界面...... 22 1.6 特殊形状窗体...... 24 实例022...
  • 实例267 防止程序多次运行 363 实例268 程序运行时禁止关机 364 实例269 获取任务栏尺寸大小 365 实例270 改变系统提示信息 366 实例271 获取系统环境变量 367 实例272 启动屏幕保护 368 7.11 系统隐藏...
  • 实例267 防止程序多次运行 363 实例268 程序运行时禁止关机 364 实例269 获取任务栏尺寸大小 365 实例270 改变系统提示信息 366 实例271 获取系统环境变量 367 实例272 启动屏幕保护 368 7.11 系统隐藏...
  • 数据结构(C++)有关练习题

    热门讨论 2008-01-02 11:27:18
    D. *建立函数create:根据一维数组a[n]建立一个单链表,使单链表中各元素的次序与a[n]中各元素的次序相同,要求该程序的时间复杂度为O(n)。 E. *整理函数tideup:在非递减有序的单链表中删除值相同的多余...
  • 再来看jdk源码中对hashCode注释,用我粗糙英语翻译一下。...(2)hashCode遵循约定:①在一个应用程序运行过程中,对于一对象,equals方法比较所用到信息未发生改变时,多次调用此对象ha...

    再来看jdk源码中对hashCode的注释,用我粗糙的英语翻译一下。

    (1)hashCode是给调用这个方法的对象生产一个哈希值。hashCode为 受益于哈希表的数据结构 提供支持(好别扭:意思就是,hashCode将会在哈希表中使用),例如HashMap。

    (2)hashCode遵循的约定:①在一个应用程序运行过程中,对于某一对象,equals方法比较所用到的信息未发生改变时,多次调用此对象的hashCode方法,应该返回相同的值(言外之意就是,在程序运行过程中,程序修改了对象的某个属性,结果这个属性参与了equals方法的比较,那么此时hashCode的输出结果应该和上次调用不同);对于同一程序多次运行则没有必要保持相同。②当调用equals(Object)方法比较两个对象相等时,则这两个对象的hashCode返回值也相同。③当两个对象equals比较不相同时,两个对象的hashCode返回值可以相同。④当然了,程序猿必须要明白给不同的对象提供不同得哈希值有利于哈希表的性能。

    (3)尽管如此,在Object对象中定义的hashCode,对于不同的对象总是返回不同的哈希值。这是因为此处的hashCode不是用java语言实现的,他是一个native方法,他的实现算法是:把此对象的内部地址转换成了整数。

    展开全文
  • 第2章 程序的灵魂——算法 2 2.1 什么叫结构化的算法?为什么要提倡结构化的算法? 2 2.7 什么叫结构化程序设计?它的主要内容是什么? 2 第3章 数据类型、运算符与表达式 2 3.3请将下面各数用八进制和十六进制数...
  • C++第一大作业

    2014-07-13 12:55:46
    第一次作业 这个作业将让你去练习建立一些简单类和使用C++...R4.4) 你代码不应该有任何内存泄露或多次释放. R4.5) 所有堆对象应该在main函数返回之前释放. R4.5)你能在添加一个新元素到数组中之前来检查界限.
  • 是操作系统结构的基础线程可以说是轻量级的进程,是程序执行的最小单位,使用线程而不用进程去进行并发程序的设计,是因为线程之间的切换与调度的成本远小于进程。线程的几种状态New状态表示刚刚创建的线程,...
  • 累计器累计回调返回值, 它是上一次调用回调时返回累积值,或initialValue;<code>currentValue</code>,必需,数组中正在处理元素;<code>currentIndex,可选,数组中正在处理...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 185
精华内容 74
关键字:

多次调用某程序的结构