多线程(一)

1.进程(在任务管理器中可以查看)
进程就是正在运行的程序,是系统进行资源分配和调用的独立单位。

2.多进程的意义
单进程下我们只能做一件事。
多进程下我们可以一边QQ聊天,一边听音乐。
可以提高CPU的使用率。

3.线程
在同一个进程内可以多个任务,每一个任务就可以看做是一个线程。
--线程是程序使用CPU的最基本单位。
--线程的执行有随机性。


4.单线程和多线程
单线程是程序顺序执行
多线程是程序并发执行

5.多线程的意义
提高应用程序的使用率(程序执行是在抢CPU的执行权)。

6.并行和并发
并行是逻辑上同时发生,指的是某一个时间段同时运行多个程序。
并发是物理上同时发生,指的是某一个时间点同时运行多个程序。

7.主线程--Java程序运行原理
--首先由Java命令启动JVM,JVM启动就相当于启动了一个进程。
--接着由该进程创建一个主线程去调用main()方法。

8.创建多线程--继承Thread类

--自定义MyThread继承Thread类
--在MyThread类中重写run()方法
--创建对象

--启动线程:start()

package com.baidu;

public class MyThread extends Thread {//MyThread继承Thread类
	@Override
	public void run() {//重写run方法
		// TODO Auto-generated method stub
		//super.run();
		for(int i=0;i<1000;++i) {
			System.out.println(i);
		}
	}
}
package com.baidu;

public class Thread_Demo{
	
	public static void main(String[] args) {
		MyThread my1 = new MyThread();//创建线程对象
		MyThread my2 = new MyThread();
		my1.start();//调用start(),启动线程
		my2.start();
	}
}

注:

run()和start()的区别?

--run()仅仅是封装被线程执行的代码,直接调用相当于普通方法

--start()用来启动线程,然后由JVM去调用该线程的run()方法

getName()用来获取线程名称

设置线程名称:

my1.setName("小明");

my2.setName("小强");

或者用带参构造方法给线程命名

public MyThread(String name){
super(name);
}

获取没有继承Thread类的当前线程名:Thread.currentThread().getName();

设置没有继承Thread类的当前线程名:Thread.currentThread().setName();

9.创建多线程--实现Runnable接口

--自定义MyRunnable实现Runnable接口

--重写run()方法

--创建MyRunnable类的对象

--创建Thread类的对象,并把上一步创建的Runnable对象作为构造参数传递

--启动线程:start();

package com.baidu;

public class MyRunnable implements Runnable {//实现Runnable接口

	@Override
	public void run() {//重写run()方法
		// TODO Auto-generated method stub
		for(int i=0;i<=1000;++i) {
			System.out.println(Thread.currentThread().getName()+"---"+i);
		}
	}

}
package com.baidu;

public class RunnableDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyRunnable my = new MyRunnable();//创建MyRunnable对象
		
		Thread td1 = new Thread(my);//创建Thread对象,将创建的MyRunnable对象作为构造参数传递
		Thread td2 = new Thread(my);
//		另一种设置线程名的方法
//		Thread td1 = new Thread(my,"小明");
//		Thread td2 = new Thread(my,"小强");
		
		
		td1.setName("小明");//设置线程名
		td2.setName("小强");
		
		td1.start();//启动线程
		td2.start();
	}

}


10.实现Runnable接口和继承Thread类相比有什么优势?

--可以避免由于Java单继承带来的局限性

--适合多个相同程序的代码去处理同一资源的情况,把线程同程序的代码,数据有效分离,较好的体现了面向对象的思想(比如火车票订票系统中,当某一张票被某台机器卖出时,其他机器就不能再卖了,避免了同一张票被卖两次)

















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值