java有多进程吗?我这样做算是多进程么?

zychere 2014-12-05 05:49:49
java每执行一个编译好的文件是不是都是独立启动一个线程?
写了一个爬虫的小例子:
package test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.MalformedURLException;
import java.net.Proxy;
import java.net.URL;

public class SpiderTest{
public static void main(String[] args) throws IOException, InterruptedException {
URL url =new URL("http://www.baidu.com");
Proxy proxy = new Proxy(Proxy.Type.HTTP,new InetSocketAddress("118.26.147.119",80));
HttpURLConnection connection = (HttpURLConnection) url.openConnection(proxy);
connection.setConnectTimeout(10000);
connection.setReadTimeout(100000);
connection.setRequestMethod("GET");
connection.setUseCaches(true);
connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
connection.connect();
System.out.println(connection.getResponseCode());
int i = connection.getResponseCode();
String content = "";
if(i==HttpURLConnection.HTTP_OK){
InputStream in = connection.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in,"gbk"));
String line = "";
while((line=br.readLine())!=null){
content+=line+"\n\r";
}
System.out.println(content);
}

}
}


package test;

import java.io.IOException;
import java.util.Scanner;

public class ControlTest {
public static void main(String[] args) throws IOException {
Process process = Runtime.getRuntime().exec("java SpiderTest");
Process process2 = Runtime.getRuntime().exec("java SpiderTest");
Process process3 = Runtime.getRuntime().exec("java SpiderTest");
Process process4 = Runtime.getRuntime().exec("java SpiderTest");
Process process5 = Runtime.getRuntime().exec("java SpiderTest");
Process process6 = Runtime.getRuntime().exec("java SpiderTest");
Process process7 = Runtime.getRuntime().exec("java SpiderTest");
Process process8 = Runtime.getRuntime().exec("java SpiderTest");
Process process9 = Runtime.getRuntime().exec("java SpiderTest");
Process process11 = Runtime.getRuntime().exec("java SpiderTest");
Process process12 = Runtime.getRuntime().exec("java SpiderTest");
Process process13 = Runtime.getRuntime().exec("java SpiderTest");
Process process14 = Runtime.getRuntime().exec("java SpiderTest");
Process process15 = Runtime.getRuntime().exec("java SpiderTest");
Process process16 = Runtime.getRuntime().exec("java SpiderTest");

System.out.print(process);
}


}


1、这里面我在ControlTest 这里面执行的process是不是独立的进程
2、我如果想往里面传参数的话是不是只能通过String args[]传参数?
3、我如何监控这些进程的运行情况,在windows的进程管理器中只能看到javaw.exe进程。
4、我这个是把编译好的SpiderTest.class文件放到了根目录下,有没有办法直接执行build里的class文件?
谢谢!
...全文
635 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ArayChou 2014-12-09
  • 打赏
  • 举报
回复
这样做没有任何好处. 缺点倒是有一些: 比如,除了你的工作线程意外,每个java虚拟机都开了若干额外的线程(例如GC线程),消耗系统资源; 额外的内存占用等等. 有人研究吧不同Java程序跑在同一个虚拟机里,没有人研究吧同一个程序泡在多个虚拟机里. (试验集群除外)
zychere 2014-12-09
  • 打赏
  • 举报
回复
引用 2 楼 rumlee 的回复:
如果你是同一台机器上,多个进程感觉真没有必要,一般采用多线程就能够很好的解决了啊。
我现在想抓取多个网站内容,每个网站用多线程去抓: 那么我用多线程来区分不同网站,再用多个爬虫分别在多个线程去抓网站会不会出问题? 如果用一个进程抓一个网站,同时有多个线程控制多个爬虫去抓是不是更好一点?
zychere 2014-12-09
  • 打赏
  • 举报
回复
引用 4 楼 ArayChou 的回复:
这样做没有任何好处. 缺点倒是有一些: 比如,除了你的工作线程意外,每个java虚拟机都开了若干额外的线程(例如GC线程),消耗系统资源; 额外的内存占用等等. 有人研究吧不同Java程序跑在同一个虚拟机里,没有人研究吧同一个程序泡在多个虚拟机里. (试验集群除外)
那我现在想在同一时刻对多个网站进行抓取,并且每个网站都有多个爬虫线程运行,这种情况怎么办?线程中嵌套线程么?
rumlee 2014-12-06
  • 打赏
  • 举报
回复
如果你是同一台机器上,多个进程感觉真没有必要,一般采用多线程就能够很好的解决了啊。
冥王之锤 2014-12-05
  • 打赏
  • 举报
回复
1、这里面我在ControlTest 这里面执行的process是不是独立的进程? 是,Runtime.exec() 方法创建一个本机进程,并返回 Process 子类的一个实例。 2、我如果想往里面传参数的话是不是只能通过String args[]传参数? 进程间通讯方法不止一种。命令行参数可以。 3、我如何监控这些进程的运行情况,在windows的进程管理器中只能看到javaw.exe进程。 java SpiderTest 也是java应用,所以只能看到java进程。 可以考虑进程间通讯。 4、我这个是把编译好的SpiderTest.class文件放到了根目录下,有没有办法直接执行build里的class文件? java -cp build完成路径 SpiderTest

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧