精华内容
下载资源
问答
  • import java.awt.AWTException; import java.awt.Robot; import java.awt.event.KeyEvent; import java.io.IOException; public class Robot05 { // Create an array of keycode data static int keyInput[] = { ...
  • Java入门程序说明

    2020-09-26 15:57:18
    关于main方法 main方法:称为主方法。写法是固定格式不可以更改。main方法是程序的入口点或起始点,无论我们编写多 少程序,JVM在运行的时候,都会从main方法...关键字:是指在程序中,Java已经定义好的单词,具有特殊

    一: 关于main方法
    main方法:称为主方法。写法是固定格式不可以更改。main方法是程序的入口点或起始点,无论我们编写多
    少程序,JVM在运行的时候,都会从main方法这里开始执行。
    二: 添加注释comment
    注释:就是对代码的解释和说明。其目的是让人们能够更加轻松地了解代码。为代码添加注释,是十分必须
    要的,它不影响程序的编译和运行。
    Java中有单行注释和多行注释
    单行注释以 //开头 换行结束
    多行注释以 /开头 以/结束
    三: 关键字keywords
    关键字:是指在程序中,Java已经定义好的单词,具有特殊含义。
    HelloWorld案例中,出现的关键字有 public 、 class 、 static 、 void 等,这些单词已经被
    Java定义好,全部都是小写字母,notepad++中颜色特殊。
    关键字比较多,不能死记硬背,学到哪里记到哪里即可。
    四: 标识符
    标识符:是指在程序中,我们自己定义内容。比如类的名字、方法的名字和变量的名字等等,都是标识符。
    HelloWorld案例中,出现的标识符有类名字 HelloWorld 。

    五: 命名规则: 硬性要求
    标识符可以包含 英文字母26个(区分大小写) 、 0-9数字 、 $(美元符号) 和 _(下划线) 。
    标识符不能以数字开头。
    标识符不能是关键字。
    命名规范: 软性建议
    类名规范:首字母大写,后面每个单词首字母大写(大驼峰式)。
    方法名规范: 首字母小写,后面每个单词首字母大写(小驼峰式)。
    变量名规范:全部小写。

    展开全文
  • 编写 Java 程序用户输入指定数字实现产生随机数。运行效。 实现思路: 定义两个变量start和end来保存起始和结束值。 通过结束值减起始值得到变化区间再加起始值,核心代码如下: rdm.nextInt(end - start ...

    返回本章节

    返回作业目录


    需求说明:

    编写 Java 程序,让用户输入指定数字实现产生随机数。运行效果如下:

    实现思路:

    • 定义两个变量start和end来保存起始和结束值。
    • 通过结束值减起始值得到变化区间再加起始值,核心代码如下:
    rdm.nextInt(end - start + 1) + start

     

    实现代码:

    import java.util.Random;
    import java.util.Scanner;
    
    public class RandomDome {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		System.out.println("请输入随机数的起始值:");
    		int start = sc.nextInt();
    		System.out.println("请输入随机数的结束值:");
    		int end = sc.nextInt();
    		Random rdm = new Random();
    		int num = rdm.nextInt(end - start + 1) + start;
    		System.out.println(num);
    	}
    
    }

     

    展开全文
  • 对于一般程序来说,系统开发者根据需要和个人的偏好,会在程序结束位置,通过添加System.exit(0),或System.out(-1),来结束程序,或不加这些指令,让程序自然运行到结束。 如:下列典型代码 package untitled14; /*...
  • 这样当这个程序在内存中已经存在一个运行实例而用户又再次运行了该程序的时候,有两种结果,第一种结果是结束目前的运行实例,打开新运行的实例;第二种就是新运行的实例退出,原有的运行实例继续运行.原理因为任何时候...
    一个程序可以在内存里面存在多个运行实例,比如,你可以打开多个微软的Word程序.但是,有些时候我们需要控制程序运行的实例只有一个,也就是说,该程序同一时刻在内存里面运行的只有一个实例.这样当这个程序在内存中已经存在一个运行实例而用户又再次运行了该程序的时候,有两种结果,第一种结果是结束目前的运行实例,打开新运行的实例;第二种就是让新运行的实例退出,原有的运行实例继续运行.
    原理
    因为任何时候只有一个实例,所以在实现这种功能的时候必须借助只能被独享的资源.如果我们的程序是基于某个平台的,那么就可以借助操作系统的内核对象来完成,比如Windows操作系统就提供了CreateMutex这个API来创建一个独享的内核对象.但是因为要考虑平台无关,Java程序的实例控制不应该使用系统的内核对象来完成,那么我们就必须找到其它的、可以独享的资源.实际上,一台机器无论是在什么操作系统上,网络端口都是独享的,也就是说基于网络端口这个独享的原理,我们可以很方便地让我们的Java程序实现在内存里面只有一个运行实例这个功能,而且这个功能的实现是与平台无关的.
    实现
    我们先来看看第一种情况是如何实现的,也就是说如果系统中已经存在运行实例的话,那么结束原有的运行实例,让新实例运行.这个实现实例控制的Java类也是一个线程,具体的实现如下: import java.net.*;public class InstanceControl extends Thread { public void run() { try{ Socket sock = new Socket("127.0.0.1",22222); //创建socket,连接22222端口 } catch (Exception e) {} try{ ServerSocket server = new ServerSocket(22222);//创建socket,在22222端口监听 server.accept(); //等待连接 server.close(); //有连接到来,也就是说有新的实例 System.exit(0); //这个实例退出 }catch (Exception e) { e.printStackTrace(); } }}下面这个Java程序的程序入口是没有实例控制功能的: public class ProgramMain { public static void main(String argv[]) { mainFrame frame = new mainFrame(); }}现在想加入实例控制,只需要添加两行代码,添加后代码如下所示: public class ProgramMain { public static void main(String argv[]) { InstanceControl ic = new InstanceControl(); ic.start(); mainFrame frame = new mainFrame(); }}在这个基础上,要实现第二种情况,也就是已经有实例运行的情况下,新的实例退出,保持原有的运行实例,就只需要一点小的改动了.具体的实现如下: import java.net.*;public class InstanceControl2 extends Thread { public void run() { try{ Socket sock = new Socket("127.0.0.1", 22222);//创建socket,连接22222端口 System.exit(0); //连接成功,说明有实例存在,则退出 }catch (Exception e) {} try{ ServerSocket server = new ServerSocket(22222);//创建socket,连接22222端口 while (true) { server.accept(); //接受连接请求 } }catch (Exception e) { e.printStackTrace(); } }}这个类的使用方法和第一种情况的那个类是一样的,只需要在原有的代码上加入两行代码即可: InstanceControl2 ic = new InstanceControl();ic.start();扩展上面的程序也许有一个小bug,就是如果程序在开始运行时ServerSocket监听的端口已经被其它程序占用,那么程序的运行就会受到影响.所以程序的端口应该尽量取得大一些,在这种情况下其它程序占用这个程序使用的端口的概率是可以忽略不计的.同时,还可以做两种扩展,第一种是把端口写在配置文件中,可通过读配置文件得到端口,这样就能够在其它程序占用目前端口的情况下改变这个程序使用的端口.还有一种是在运行的时候用两个InstanceControl类分别在两个端口监听,只要有一个InstanceControl类得到连接就做出响应,这样两个端口都被其它程序占用的概率就更加的微乎其微了.

    转载于:https://www.cnblogs.com/521taobao/archive/2012/03/17/2402485.html

    展开全文
  • 如何让java程序执行一段时间后停止

    千次阅读 2020-11-09 14:08:46
    如何让java程序执行一段时间后停止 1、概述 在本文中,我们将学习如何在一段时间后结束长时间运行的任务。我们将探讨这个问题的各种解决方案。此外,还将介绍各种方案缺点。 2、使用循环 假设我们在一个循环中处理一...

    如何让java程序执行一段时间后停止

    1、概述

    在本文中,我们将学习如何在一段时间后结束长时间运行的任务。我们将探讨这个问题的各种解决方案。此外,还将介绍各种方案缺点。

    2、使用循环

    假设我们在一个循环中处理一组数据,比如电子商务应用程序中循环获取产品项的一些信息,但可能没有必要完成所有项的处理。
    实际上,我们希望只处理某一特定时间之前的内容,在此之后,我们希望停止执行,并显示列表在此时间之前处理的内容。
    代码例子如下:

        long start = System.currentTimeMillis();
        long end = start + 30*1000;
        while (System.currentTimeMillis() < end) {
        // 一些费时的操作
        }
    
    

    在这里,如果时间超过了30秒的限制,循环将中断。在上述解决方案中有一些我们值得注意的地方:

    • 结果无法准确预测:循环运行的时间可能超过规定的时间限制。这将取决于每个迭代可能花费的时间。例如,如果每次迭代可能花费7秒,那么总时间可能会增加到35秒,这比期望的30秒时间限制大约多17%。
    • 阻塞:在主线程中这样的处理可能不是一个好主意,因为它会阻塞很长一段时间。相反,这些操作应该与主线程解耦。

    3、使用中断机制

    在这里,我们将使用一个单独的线程来执行长期运行的操作。在超时时,主线程将向工作线程发送一个中断信号。如果工作线程仍然是活的,它将捕获信号并停止执行。如果worker线程在超时之前完成,它将不会对worker线程产生影响。

    让我们看看工作线程:

    // 实现Runnable线程接口
    class LongRunningTask implements Runnable {
        @Override
        public void run() {
            try {
                while (!Thread.interrupted()) {
                    Thread.sleep(500);
                }
            } catch (InterruptedException e) {
                // log error
            }
        }
    }
    
    

    在这里,Thread.sleep(500)模拟长时间运行的操作。除了这个,还有其他的操作。检查中断标志很重要,因为不是所有的操作都是可中断的。所以在这些情况下,我们应该手动检查标志。

    另外,我们应该在每次迭代中检查这个标志,以确保线程在最多一次迭代的延迟内停止自身执行。

    接下来,我们将介绍发送中断信号的三种不同机制。

    3.1、使用Timer组件

    我们可以创建一个TimerTask在超时时中断工作线程:

    class TimeOutTask extends TimerTask {
        private Thread t;
        private Timer timer;
     
        TimeOutTask(Thread t, Timer timer){
            this.t = t;
            this.timer = timer;
        }
     
        // 用于结束工作线程
        public void run() {
            if (t != null && t.isAlive()) {
                t.interrupt();
                timer.cancel();
            }
        }
    }
    
    

    上面我们定义了一个TimerTask,传入工作线程作,timer定时器为参数,它将在调用工作线程的run方法时中断工作线程。定时器会在指定的延迟后触发TimerTask:

    // 创建工作线程
    Thread t = new Thread(new LongRunningTask());
    
    // 创建定时器,指定时间内结束工作线程
    Timer timer = new Timer();
    timer.schedule(new TimeOutTask(t, timer), 30*1000);
    t.start();
    
    

    3.2、使用Future , get 方法

    我们也可以使用Future的get方法来代替Timer:

    ExecutorService executor = Executors.newSingleThreadExecutor();
    Future future = executor.submit(new LongRunningTask());
    try {
        f.get(30, TimeUnit.SECONDS);
    } catch (TimeoutException e) {
        f.cancel(true);
    } finally {
        service.shutdownNow();
    }
    
    

    这里我们使用ExecutorService来提交工作线程,该工作线程返回一个Future的实例,Future的get方法将阻塞主线程,直到指定的时间。它将在指定超时后引发TimeoutException。在catch块中,我们通过调用Future对象上的cancel方法来中断工作线程。与前一种方法相比,这种方法的主要优点是它使用一个池来管理线程,而Timer只使用一个线程(没有池)。

    3.3、使用ScheduledExcecutorSercvice

    我们还可以使用ScheduledExecutorService来中断任务。这个类是ExecutorService的扩展,提供了相同的功能,并添加了几个处理执行调度的方法。这样可以在设定时间单位的一定延迟后执行给定的任务:

    ScheduledExecutorService executor = Executors.newScheduledThreadPool(2);
    Future future = executor.submit(new LongRunningTask());
    executor.schedule(new Runnable(){
        public void run(){
            future.cancel(true);
        }
    }, 1000, TimeUnit.MILLISECONDS);
    executor.shutdown();
    
    

    上述代码,我们使用newScheduledThreadPool方法创建了一个大小为2的调度线程池。ScheduledExecutorService.schedule方法接受一个Runnable、一个延迟值和延迟的单位。
    上述程序将任务安排在提交后1秒后执行。此任务将取消原来的长时间运行的任务。
    注意,与前面的方法不同,我们没有通过调用Future.get方法阻塞主线程。因此,它是上述所有方法中最受欢迎的方法。

    7、这样停止是万无一失么

    并不能保证线程执行在一段时间后停止。主要原因是并不是所有的阻塞方法都是可中断的。事实上,只有少数定义良好的可中断的方法才支持中断。因此,如果线程被中断并设置了标志,那么在它到达这些可中断方法之一之前,不会发生任何其他事情会一直阻塞下去。
    例如,读和写方法只有在使用interruptiblnel创建的流上调用时才是可中断的。BufferedReader不是中断机制。因此,如果线程使用它来读取文件,那么在read方法中阻塞的这个线程上调用interrupt()不起作用。

    但是,我们可以在每次读取循环后显式地检查中断标志。这将为延迟停止线程提供合理的保证。但是,这并不能保证在一段严格时间后停止线程,因为我们不知道读操作需要多少时间。另一方面,Object类的wait方法是可中断的。因此,在wait方法中阻塞的线程将在设置中断标志后立即抛出InterruptedException。我们可以通过在其方法签名中查找抛出InterruptedException来识别阻塞方法。一个重要的建议是避免使用已弃用的Thread.stop()方法。停止线程会导致它解锁它锁定的所有监视器。这是由于向上传播堆栈的ThreadDeath异常造成的。

    8、结论

    在本文程中,我们总结了在给定时间后停止执行的各种技术,以及每种技术的优缺点。

    展开全文
  • 如何停止java的线程一直是一个开发...也有好多人问过我,所以今天在这里总结一下希望可以更多的人知道在java中如何安全的结束一个正在运行的线程。 在Java的多线程编程中,java.lang.Thread类型包含了一些列的方
  • 也有好多人问过我,所以今天在这里总结一下希望可以更多的人知道在java中如何安全的结束一个正在运行的线程。 在Java的多线程编程中,java.lang.Thread类型包含了一些列的方法start(), stop(), stop(Throwable) ...
  • 这样当这个程序在内存中已经存在一个运行实例而用户又再次运行了该程序的时候,有两种结果,第一种结果是结束目前的运行实例,打开新运行的实例;第二种就是新运行的实例退出,原有的运行实例继续运行。 解决方法...
  • 让Java程序只运行一个实例 作者:梁邦勇 不是我 一个程序可以在内存里面存在多个运行实例,比如,你可以打开多个微软的Word程序。但是,有些时候我们需要控制程序运行的实例只有一个,也就是说,该程序同一时刻在...
  • 在linux系统下如何使一个程序在后台一直执行呢?... 例如,如果在终端中执行java -jar xxx.jar&命令,当终端关闭时,xxx.jar也会同时结束运行,但是如果执行nohup java -jar xxx.jar&命令,则程序会在后台一直运
  • 我想添加单击事件他退出程序(要点控制台结束按钮那样的效果,关闭界面能实现。)如图:![图片说明](https://img-ask.csdn.net/upload/201505/26/1432611710_933601.jpg)点退出,相当于点了控制台那个标记
  • 命令,当终端关闭时,xxx.jar也会同时结束运行,但是如果执行nohup java -jar xxx.jar &命令,则程序会在后台一直运行,值得注意的是,此时程序控制台输出会被转移到nohup.out文件中。 nohup <程序名> &...
  • 对于一般程序来说,系统开发者根据需要和个人的偏好,会在程序结束位置,通过添加System.exit(0),或System.out(-1),来结束程序,或不加这些指令,让程序自然运行到结束。 如:下列典型代码package untitled14;/*...
  • Java并行程序基础

    2017-05-27 08:57:44
    start()方法会新建一个线程并这个线程执行run()方法。如果用run()方法来开启线程,只是做为一个普通的方法调用。 2,终止线程:stop()方法会在结束线程时,会直接终止线程,并立即释放这个线程持有的锁。太过于...
  • 原因:单元测试类中的主线程不管它所在类中创建的子线程的状态,它(主线程)执行完相关程序后就关闭线程,其他线程也会立即关闭,所以子线程没有继续执行就结束了。 解决办法:试图保持主线程不关闭 例如:在单元...
  • java编译器会寻找机会内联所有的final方法,能提升效率。 2、尽量重用对象。拼接字符串时应该使用StringBuilder/StringBuffer。 3、尽可能使用局部变量,局部变量在栈中生成,速度快;其他成员变量、静态变量在堆...
  • 对于一般程序来说,系统开发者根据需要和个人的偏好,会在程序结束位置,通过添加System.exit(0),或System.out(-1),来结束程序,或不加这些指令,让程序自然运行到结束。 如:下列典型代码 package untitled14; ...
  • Java应用程序添加退出事件响应 ...对于一般程序来说,系统开发者根据需要和个人的偏好,会在程序结束位置,通过添加System.exit(0),或System.out(-1),来结束程序,或不加这些指令,让程序自然运行到...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 803
精华内容 321
关键字:

java让程序结束

java 订阅