基本概念

一、什么是程序?进程?线程?多线程

1.程序(Program):本身是指令的集合,是为让计算机执行某些操作或者解决某个问题而编写的一系列有序指令的集合。通常由一段代码+数据+资源文件组成(涉及语法+算法+数据结构)
2.进程(Process):运行程序的实体,某个程序运行起来就形成了一个进程。
3.线程(Thread):线程是进程中一个独立运行的单位,是进程中一个单一顺序的控制流,也是操作系统能够进行运算调度的最小单位,线程被包含在进程之中。每个进程必须包含一个线程(主线程),这个主线程是由JVM创建启动的。自己在进程中创建的线程称为子线程。
4.多线程:一个进程并发启动多个线程,来执行任务,每个线程是相互独立的,线程没有自己独立的存储空间,他们由进程统一管理。多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源利用率来提高系统的效率。
区别:
1.程序存储在磁盘上,进程存储在内存中,进程要运行需要向操作系统提交请求,操作系统根据请求信息分配内存和其他的硬件资源。
2.进程是资源分配的最小单位,线程是CPU调度的最小单位
3.一个进程可以有多个线程,每条线程可以并行执行不同的任务
4.子进程和父进程有不同的代码和数据空间,而多个线程共享进程的数据空间,每个线程有自己的堆栈和寄存器。

二、Java多线程的实现方式

1.Runnable接口(需要实现)

run():线程的执行方法

2.Thread类(需要继承)

run():线程的执行方法
start():线程的启动方法
sleep():线程的休眠方法

注意:Thread是Runnable的子类

Runnable相比Thread的优势:
1.避免Java单继承特性带来的局限性
2.增强程序的健壮性,代码能被多个线程共享,代码和数据相互独立
3.适合多个相同程序代码的线程区处理同一资源。

下面案例借鉴博主:https://blog.csdn.net/ns_code/article/details/17161237

class MyThread extends Thread{
	private int ticket = 5;
	public void run(){
		for (int i=0;i<10;i++)
		{
			if(ticket > 0){
				System.out.println("ticket = " + ticket--);
			}
		}
	}
}

 
public class ThreadDemo{
		  public static void main(String[] args){
		  MyThread mt = new MyThread();
		  Thread t1 = new Thread(mt);
		  Thread t2 = new Thread(mt);
		  Thread t3 = new Thread(mt);
		  t1.start();
		  t2.start();
		  t3.start();
}
}

在这里插入图片描述
由结果看出 每个线程都独自卖出了5张票。

class MyThread implements Runnable{
	private int ticket = 5;
	public void run(){
		for (int i=0;i<10;i++)
		{
			if(ticket > 0){
				System.out.println("ticket = " + ticket--);
			}
		}
	}
}
 
public class RunnableDemo{
	public static void main(String[] args){
		MyThread my = new MyThread();
		new Thread(my).start();
		new Thread(my).start();
		new Thread(my).start();
	}
}

在这里插入图片描述
由结果看出三个线程共同卖出了5张票。

在第一种方法中,我们new了3个Thread对象,即三个线程分别执行三个对象中的代码,因此便是三个线程去独立地完成卖票的任务;而在第二种方法中,我们同样也new了3个Thread对象,但只有一个Runnable对象,3个Thread对象共享这个Runnable对象中的代码,因此,便会出现3个线程共同完成卖票任务的结果。如果我们new出3个Runnable对象,作为参数分别传入3个Thread对象中,那么3个线程便会独立执行各自Runnable对象中的代码,即3个线程各自卖5张票。

二、什么是面向对象?面向过程?

一句话概括:面向过程是一件事该怎么做,面向对象是一件事该由谁(对象)做,不管它怎么做,最后一群对象合力将事情做完就行。
详细的说:假设我们要处理一件事:洗衣服

面向过程就是把一件事分成多个步骤,每个步骤可以写出一个个函数,然后在主函数中调用。
1.收拾出要洗的衣服
2.将衣服放进洗衣机
3.倒入洗衣液
3.拿出洗完的衣服
4.晾晒衣服

面向对象就是把一件事分工给多个对象,让他们合作完成。
a对象收拾出脏衣服
b对象洗衣服
c对象晒衣服
abc三者共同完成洗衣服这件事,但是b对象可以让别人帮他,我们不用管他们分别是怎么完成的,任务交给他们,他们合力完成,那么就OK了!每个对象可以封装成类,然后实例化类的对象并调用类的方法。

Java是一种完全完全面向对象的编程语言,C语言是一种面向过程的语言,在我看来没有实例化类,调用类的方法的都属于面向过程。

区别
面向过程的语言不允许程序员自己定义数据类型,只能使用程序内置的数据类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值