多线程

多线程基础:

1、 进程与线程

2、 创建线程

3、 线程操作API

进程与线程:

程序是硬盘上由数据和指令序列组成的文件。

操作系统:是管理程序的程序,管理程序和数据的存储,程序的执行,程序的并发调度,程序的退出等。

1、多线程编程

    1、程序:是指令+数据组成的可执行文件,就是在磁盘存储的程序文件,程序是静态的。如,QQ.exe

    2、进程:正在内存中执行的程序!占有一定的内存等资源,是动态执行的程序,多个程序并发执行,受操作系统调度。

    3、进程的“并发”运行:宏观上是并发的,微观上是交替执行的,每个程序执行一定的时间就切换到另外一个程序。

    4、线程:是“进程中”“并发”执行的“过程(方法)”,共享进程的内存,线程的并发也是操作系统调度,进程的并发实际上是线程的并发。

    5、并发:CPU只能处理一个流程,操作系统分时将线程交给CPU执行,所有的线程走走停停,某个时间点只有一个线程在Running(考虑单处理器的情况)状态。

    6、进程的并发,实际上是利用操作系统调度线程并发实现的。

    7、进程拥有内存空间,线程共享进程的内存

    8、Java中Java进程占用内存(方法区、堆内存、栈),Java 中的线程共享进程的内存,访问堆中的对象

2、什么是进程:

    进程:正在内存中执行的程序!

    进程是一块包含了某些资源的内存区域,操作系统利用进程把它的工作划分为一些功能单元。进程还拥有一个私有的虚拟地址空间,该空间仅能被它所包含的线程访问。

    线程只能归属于一个进程并且只能访问该进程所拥有的资源。当操作系统创建一个进程后,该进程会自动申请一个名为主线程或首要线程的线程。

3、什么是线程:

    在计算机内部,凡是并发性操作,都是线程实现的。比如,在QQ中跟两个人一起聊天。

    线程是进程中并发执行的过程(方法)。

    同类的多个线程共享一块内存空间和一组系统资源,线程本身有一个供程序执行时的堆栈。线程在切换时负荷小,因此线程也被称为轻负荷进程。一个进程中可以包含多个线程。

4、进程与线程的区别:

    进程包含线程,进程占有内存,线程属于进程,共享进程内存。进程的并发本质上是利用线程的并发实现的。

5、线程使用场合:

    凡是在软件中,处理并发执行,都要用到线程。

    比如:多线程聊天、多线程下载

    在软件中,凡是出现一起干的活,都是线程。

6、并发原理:

        多个线程同时运行,只是我们感官上的一种表现。事实上线程是并发运行的,OS将时间划分为很多时间片段,尽可能均匀分配给每一个线程,获取时间片段的线程被CPU运行,而其他线程全部等待。所以微观上是走走停停的,宏观上都在运行。这种现象叫并发,但是不是绝对意义上的“同时发生”。

7、 线程的状态:见本子

创建线程:

1、一个线程就是一个对象。

2、线程对象中一定有一个可以并发执行的过程(方法)。

3、线程是软件中并发运行的过程。

4、线程有API类Thread,代表线程的类型。

5、如何创建线程:

    1、 继承Thread类,就是创建具体的(用户自己定义的)线程类型

    2、 重写线程并发方法run(),提供一个自己定义的并发方法

    3、 使用new创建具体的线程对象

    4、 使用线程API方法start(),尽快启动run()方法,也就是启动了并发执行的方法。

public class DemoThread {

	public static void main(String[] args) {
		MyThread t1=new MyThread();//启动一个线程
		MyThread t2=new MyThread();//启动一个线程
		t1.start();//尽快启动run()方法
		t2.start();//尽快启动run()方法
	}
}
class MyThread extends Thread{
	public void run() {
		for(int i=1;i<=100;i++) {
			System.out.println(i);
		}
	}
}

6、使用Runnable创建并启动线程

    实现Runnable接口并重写run方法来定义线程体,然后在创建线程的时候将Runnable的实例传入并启动线程。

这样做的好处在于可以将线程与线程要执行的任务分离开减少耦合,同时java是单继承的,定义一个类实现Runnable接口这样的做法可以更好的去实现其他父类或接口。因为接口是多继承关系。

    1、 实现Runnable接口

    2、 实现run方法

    3、 newThread(new 实现Runnable接口类型)   新建状态的线程

    4、 使用Thread类的start方法启动线程(Runnable)

    5、 线程会尽快执行run方法(Running)

public class DemoRunnable {

	public static void main(String[] args) {
		Runner runner=new Runner();
		Thread t1=new Thread(runner);
		Thread t2=new Thread(new Runner());
		t1.start();
		t2.start();
	}
}
class Runner implements Runnable{
	public void 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值