「java进程实验」java程序实验总结

博主:adminadmin 2023-01-16 12:24:07 880

本篇文章给大家谈谈java进程实验,以及java程序实验总结对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

怎样进行java进程的远程调试

在远程启动程序时,要加上参数,来开启远程Debug模式,然后Eclipse中要创建一个远程Debug的链接。 你也可以在百度中搜索 java 远程debug.或者参考如下示例:

在启动程序时,如果是tomcat ,只需要在startup.bat最前面加入下面一行:

set JAVA_OPTS=%JAVA_OPTS% -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n

如果是java程序,应该: java %JAVA_OPTS% -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n 你的程序。

Java示例:如何执行进程并读取输出

"; public static final String ERROR_MESSAGE = "程序执行出错:"; public static void main(String[] args) throws Exception { // 执行程序 Process process = Runtime.getRuntime().exec(COMMAND); // 打印程序输出 readProcessOutput(process); // 等待程序执行结束并输出状态 int exitCode = process.waitFor(); if (exitCode == SUCCESS) { System.out.println(SUCCESS_MESSAGE);} else {System.err.println(ERROR_MESSAGE + exitCode);}} /*** 打印进程输出** @param process 进程*/private static void readProcessOutput(final Process process) { // 将进程的正常输出在 System.out 中打印,进程的错误输出在 System.err 中打印 read(process.getInputStream(), System.out); read(process.getErrorStream(), System.err); } // 读取输入流

java如何实现操作系统进程调度试验

可以的,想必你是个学生,而且正在学习的是操作系统这门课程。我想你们老师只是会教你们操作系统这门课程,会教你们先来先服务,时间片轮流这几种进程调度的方法。如果你上课听懂了,那么你要做的是熟悉这个思想,而不是真的要去实现操作系统级别的进程调度(这对于一个学生来说很有难度,当然天才除外)。

所以目的明确,办事的方法不一样,你只要熟悉JAVA进程编程这一块,你就可以动手开始写了,你可以用JAVA带的进程类thread,因为你的目的是为了熟悉进程调度算法,而不是如何去创建一个进程(创建JAVA为你封装好了)。至于如何实现这些调度算法就靠你自己写了。

也许看到这里,你会觉得我一点有用的代码都没贴出来,原因很简单:我没时间写这种代码(多进程编程一直是编程的难点,特别是资源的共享这一块)。第2,成果是要自己争取,别人不会给你最终的答案,最多给你指个方向(出来工作这么久,没人给过现成的,能跑的代码。给个方向就已经非常感激别人了,很多时候,别人理都赖的理你)。

java进程操作

只能通过外部方法调用进程的interrupt方法,然后在进程的run方法中捕获InterruptedException异常,在catch 块中完成你所谓的记录进程信息操作,然后再通过外部方法重新start进程

JAVA 怎么实现多进程同步

你好,在Java中实现多个进程同步方法有两种,我就介绍通过继承Thread来实现线程来举例吧!第一种,创建一个Thread类的子类,在里面重写一个run()方法,然后在主线程main()方法里面创建几个类的对象,一个对象代表一个线程,然后通过start()方法启动线程。第二种,创建多个Thread类的子类,在里面重写一个run()方法,然后在主线程main()方法里面创建这些类的对象,一个对象代表一个线程,然后通过start()方法启动线程。两者的区别:第一种是多个线程同步完成一个任务,比如买票,第二种是不同线程完成不同的任务。intertupt()方法用来“吵醒”休眠的线程,sleep()方法让进程处于睡眠状态。答案不满意可以追问,想交流可以加我QQ:460148261,可以一起讨论。

java 多进程并发控制怎么做?

进程间的通讯无非就是读写文件,socket通讯或者使用共享内存。

你不想用读写文件的方式,那就用共享内存或者socket通讯的方式。我个人觉得用socket比较简单,也许是因为我对socket比较熟悉。

下面是一篇java实现共享内存的文章,java没法管理内存,其实他也是靠创建映像文件来实现的。

共享内存在java中的实现

在jdk1.4中提供的类MappedByteBuffer为我们实现共享内存提供了较好的方法。该缓冲区实际上是一个磁盘文件的内存映像。二者的变化将保持同步,即内存数据发生变化会立刻反映到磁盘文件中,这样会有效的保证共享内存的实现。

将共享内存和磁盘文件建立联系的是文件通道类:FileChannel。该类的加入是JDK为了统一对外部设备(文件、网络接口等)的访问方法,并且加强了多线程对同一文件进行存取的安全性。例如读写操作统一成read和write。这里只是用它来建立共享内存用,它建立了共享内存和磁盘文件之间的一个通道。

打开一个文件建立一个文件通道可以用RandomAccessFile类中的方法getChannel。该方法将直接返回一个文件通道。该文件通道由于对应的文件设为随机存取文件,一方面可以进行读写两种操作,另一方面使用它不会破坏映像文件的内容(如果用FileOutputStream直接打开一个映像文件会将该文件的大小置为0,当然数据会全部丢失)。这里,如果用 FileOutputStream和FileInputStream则不能理想的实现共享内存的要求,因为这两个类同时实现自由的读写操作要困难得多。

下面的代码实现了如上功能,它的作用类似UNIX系统中的mmap函数。

// 获得一个只读的随机存取文件对象

RandomAccessFile RAFile = new RandomAccessFile(filename,"r");

// 获得相应的文件通道

FileChannel fc = RAFile.getChannel();

// 取得文件的实际大小,以便映像到共享内存

int size = (int)fc.size();

// 获得共享内存缓冲区,该共享内存只读

MappedByteBuffer mapBuf = fc.map(FileChannel.MAP_RO,0,size);

// 获得一个可读写的随机存取文件对象

RAFile = new RandomAccessFile(filename,"rw");

// 获得相应的文件通道

fc = RAFile.getChannel();

// 取得文件的实际大小,以便映像到共享内存

size = (int)fc.size();

// 获得共享内存缓冲区,该共享内存可读写

mapBuf = fc.map(FileChannel.MAP_RW,0,size);

// 获取头部消息:存取权限

mode = mapBuf.getInt();

如果多个应用映像同一文件名的共享内存,则意味着这多个应用共享了同一内存数据。这些应用对于文件可以具有同等存取权限,一个应用对数据的刷新会更新到多个应用中。

为了防止多个应用同时对共享内存进行写操作,可以在该共享内存的头部信息加入写操作标志。该共享内存的头部基本信息至少有:

int Length; // 共享内存的长度。

int mode; // 该共享内存目前的存取模式。

共享内存的头部信息是类的私有信息,在多个应用可以对同一共享内存执行写操作时,开始执行写操作和结束写操作时,需调用如下方法:

public boolean StartWrite()

{

if(mode == 0) { // 标志为0,则表示可写

mode = 1; // 置标志为1,意味着别的应用不可写该共享内存

mapBuf.flip();

mapBuf.putInt(mode); // 写如共享内存的头部信息

return true;

}

else {

return false; // 指明已经有应用在写该共享内存,本应用不可写该共享内存

}

}

public boolean StopWrite()

{

mode = 0; // 释放写权限

mapBuf.flip();

mapBuf.putInt(mode); // 写入共享内存头部信息

return true;

}

这里提供的类文件mmap.java封装了共享内存的基本接口,读者可以用该类扩展成自己需要的功能全面的类。

如果执行写操作的应用异常中止,那么映像文件的共享内存将不再能执行写操作。为了在应用异常中止后,写操作禁止标志自动消除,必须让运行的应用获知退出的应用。在多线程应用中,可以用同步方法获得这样的效果,但是在多进程中,同步是不起作用的。方法可以采用的多种技巧,这里只是描述一可能的实现:采用文件锁的方式。写共享内存应用在获得对一个共享内存写权限的时候,除了判断头部信息的写权限标志外,还要判断一个临时的锁文件是否可以得到,如果可以得到,则即使头部信息的写权限标志为1(上述),也可以启动写权限,其实这已经表明写权限获得的应用已经异常退出,这段代码如下:

// 打开一个临时的文件,注意同一共享内存,该文件名要相同,可以在共享文件名后加后缀“.lock”。

RandomAccessFile fis = new RandomAccessFile("shm.lock","rw");

// 获得文件通道

FileChannel lockfc = fis.getChannel();

// 获得文件的独占锁,该方法不产生堵塞,立刻返回

FileLock flock = lockfc.tryLock();

// 如果为空,则表明已经有应用占有该锁

if(flock == null) {

...// 不能执行写操作

}

else {

...// 可以执行写操作

}

该锁会在应用异常退出后自动释放,这正是该处所需要的方法。

关于java进程实验和java程序实验总结的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。