`
zhuobinzhou
  • 浏览: 134299 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
阅读更多

程序与进程:

程序是一个静态的概念,是一组有序的静态指令。  而进程则是执行程序的动态过程。

一个程序可以执行多个进程,一个进程可以执行多个程序。例如:一个进程进行C源程序编译时,它要执行前处理、词法语法分析、代码生成等几个程序。反之,同一个程序也可能由多个进程同时执行。

程序可以作为一种软件资源长期保存着;而进程则只是在执行时存在,它是暂时的。

进程需要使用一种机制才能执行程序,这种机构成为处理机(Processor)。处理机执行指令,根据指令的性质,处理机可以单独用硬件或者软、硬件结合起来构成。如果指令是机器指令,那么处理机就是CPU。

进程具有并发与不确定性。

线程与进程:

进程具备并发的特点,这种并发性是不同进程之间反映出来的,不同的进程有不同进程空间,进程之间的切换消耗比较大。于是,引进了线程的概念。在进程的内部引入并发性,一个进程可以创建多个线程。不同线程之间共享进程的地址空间和数据。

一般地讲,线程是一个程序,或者进程内部的一个顺序控制流。线程本身不能独立运行,必须在进程中执行,使用进程的地址空间。每个线程有自己单独的程序计数器。

每个程序执行时都会产生一个进程,而每一个进程至少产生一个主线程。

创建线程:

java定义了一个线程的概念模型,把一个线程分为了三部分:虚拟CPU(java .lang.Thread类),虚拟CPU执行代码和数据。创建一个java .lang.Thread的对像,就意味着创建一个线程。  一个由main开始执行的java程序,至少包含一个线程(主线程)。创建多个Thread对象,就创建了多个线程。

Thread类通过其run()方法来执行任务,方法run()为线程体。一般在java中有两种比较典型的构造线程的方法:

1)继承Thread类,重写run()方法。

2)实现Runnable接口,重写run()方法。

这两种方法都通过Thread类的start()方法启动线程。

 

 

public class TestThread1 extends Thread{
	public TestThread1(String name) {
		super(name);
		
	}
	@Override
	public void run() {
		for(int i=0; i<10; i++) {	
			System.out.println(Thread.currentThread().getName() + "------" + i);
		}
	}
	public static void main(String args[]) {
		TestThread1 testThread1 = new TestThread1("subThread");
		testThread1.start();
		for(int i=0; i<10; i++) {
			System.out.println(Thread.currentThread().getName() + "------" + i);
		}
		
	}
}
/*out:
	main------0
	main------1
	main------2
	main------3
	main------4
	main------5
	main------6
	subThread------0
	subThread------1
	subThread------2
	subThread------3
	subThread------4
	subThread------5
	subThread------6
	main------7
	main------8
	main------9
	subThread------7
	subThread------8
	subThread------9
*/

 

这种创建方式,把线程执行的逻辑代码直接写在Thread的子类中。根据线程的概念的模型,虚拟CPU与代码就混合在一起,这样不便于以后的维和和扩展。

下面实例演示虚拟CPU与代码分离:

public class TestThread0 {
	public static void main(String args[]) {
		MyThreadDemo myThread = new MyThreadDemo();
		myThread.start();
		for(int i=0; i<10; i++) {
			System.out.println(Thread.currentThread().getName() + "------" + i);
		}
	}
}
class MyThreadDemo extends Thread {
	public void run() {
		for(int i=0; i<10; i++) {	
			System.out.println(Thread.currentThread().getName() + "------" + i);
		}
	}
}
/*out:
	main------0
	main------1
	main------2
	main------3
	main------4
	main------5
	Thread-0------0
	main------6
	main------7
	main------8
	main------9
	Thread-0------1
	Thread-0------2
	Thread-0------3
	Thread-0------4
	Thread-0------5
	Thread-0------6
	Thread-0------7
	Thread-0------8
	Thread-0------9
*/

 

java是单继承的,子类继承自Thread之后就不能继承其他父类了,这样影响了其扩展性。

下面示例演示实现Runnable接口:

 

public class CopyOfTestThread0 {
	public static void main(String args[]) {
		RunnerDemo r = new RunnerDemo();
		r.run();
		Thread t = new Thread(r,"subThread");
		t.start();
		for(int i=0; i<10; i++) {
			System.out.println(Thread.currentThread().getName() + "------" + i);
		}
	}
}
class RunnerDemo implements Runnable {
	public void run() {
		for(int i=0; i<10; i++) {	
			System.out.println(Thread.currentThread().getName() + "------" + i);
		}
	}
}
/*out:
	main------0
	main------1
	main------2
	main------3
	main------4
	main------5
	main------6
	main------7
	main------8
	main------9
	main------0
	main------1
	main------2
	main------3
	main------4
	main------5
	main------6
	main------7
	main------8
	main------9
	subThread------0
	subThread------1
	subThread------2
	subThread------3
	subThread------4
	subThread------5
	subThread------6
	subThread------7
	subThread------8
	subThread------9*/

 

每个线程都占用一些CPU时间以及内存空间,如果创建过多,就将消耗过大,使得整个进程运行缓慢。java使用线程池应对这个问题。

 

分享到:
评论

相关推荐

    Java多线程设计模式上传文件

    Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式...

    java多线程读取文件

    Java多线程读大文件 java多线程写文件:多线程往队列中写入数据

    java多线程进度条

    java多线程进度条

    java多线程ppt

    java多线程PPT 多线程基本概念 创建线程的方式 线程的挂起与唤醒 多线程问题

    深入浅出 Java 多线程.pdf

    在本文中,我们将深入浅出Java多线程编程的世界,探索多线程编程的基本概念、多线程编程的优点、多线程编程的缺点、多线程编程的应用场景、多线程编程的实现方法等内容。 一、多线程编程的基本概念 多线程编程是指...

    java 多线程操作数据库

    一个java 多线程操作数据库应用程序!!!

    java多线程经典案例

    java多线程经典案例,线程同步、线程通信、线程阻塞等经典案例

    Java多线程编程实战指南(核心篇)

    Java多线程编程实战指南(核心篇) 高清pdf带目录 随着现代处理器的生产工艺从提升处理器主频频率转向多核化,即在一块芯片上集成多个处理器内核(Core),多核处理器(Multicore Processor)离我们越来越近了――如今...

    Java多线程知识点总结

    该文档总结了Java多线程相关的知识点,分享给大家,简单易懂!

    java多线程的讲解和实战

    详细的讲解了java多线程的原理,并配有代码进行实战,适合java初学者和想对多线程有进一步了解的人。

    java多线程通信图解

    一张图方便理解和掌握java 多线程之间通信的实质 java 多线程 其实就是每个线程都拥有自己的内存空间,多线程之间的通信,比例A线程修改了主内存(main方法的线程)变量,需要把A线程修改的结果同步到主线程中,...

    java多线程处理数据库数据

    java多线程处理数据库数据,使用并发包,无框架,可批量处数据库数据,进行增删改。。等等操作。

    java多线程,对多线程,线程池进行封装,方便使用

    java多线程,对多线程,线程池进行封装,方便使用

    Java多线程编程经验

    现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。 线程是指进程中的一个执行流程,一个进程中可以运行多个线程。...本文档提供Java多线程编程经验,方便广大Java爱好者研究学习Java多线程

    java多线程处理大数据

    java多线程处理大数据,可根据配置的线程数,任务去调度处理

    java多线程并发

    java多线程并发的在新窗口

    Java多线程机制(讲述java里面与多线程有关的函数)

    Java多线程机制 9.1 Java中的线程 9.2 Thread的子类创建线程 9.3 使用Runable接口 9.4 线程的常用方法 9.5 GUI线程 9.6 线程同步 9.7 在同步方法中使用wait()、notify 和notifyAll()方法 9.8 挂起、恢复和终止线程 ...

    java多线程核心技术

    资深Java专家10年经验总结,全程案例式讲解,首本全面介绍Java多线程编程技术的专著 结合大量实例,全面讲解Java多线程编程中的并发访问、线程间通信、锁等最难突破的核心技术与应用实践 Java多线程无处不在,如...

    java多线程实现大批量数据导入源码

    java多线程实现大批量数据切分成指定份数的数据,然后多线程处理入库或者导出,线程的个数和每份数据的数量都可以控制

    java多线程查询数据库

    java多线程并发查询数据库,使用线程池控制分页,并发查询。

Global site tag (gtag.js) - Google Analytics