1.进程(在任务管理器中可以查看)
进程就是正在运行的程序,是系统进行资源分配和调用的独立单位。
2.多进程的意义
单进程下我们只能做一件事。
多进程下我们可以一边QQ聊天,一边听音乐。
可以提高CPU的使用率。
3.线程
在同一个进程内可以多个任务,每一个任务就可以看做是一个线程。
--线程是程序使用CPU的最基本单位。
--线程的执行有随机性。
4.单线程和多线程
单线程是程序顺序执行
多线程是程序并发执行
5.多线程的意义
提高应用程序的使用率(程序执行是在抢CPU的执行权)。
6.并行和并发
并行是逻辑上同时发生,指的是某一个时间段同时运行多个程序。
并发是物理上同时发生,指的是某一个时间点同时运行多个程序。
7.主线程--Java程序运行原理
--首先由Java命令启动JVM,JVM启动就相当于启动了一个进程。
--接着由该进程创建一个主线程去调用main()方法。
--在MyThread类中重写run()方法
--创建对象
进程就是正在运行的程序,是系统进行资源分配和调用的独立单位。
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();
}
}
--可以避免由于Java单继承带来的局限性
--适合多个相同程序的代码去处理同一资源的情况,把线程同程序的代码,数据有效分离,较好的体现了面向对象的思想(比如火车票订票系统中,当某一张票被某台机器卖出时,其他机器就不能再卖了,避免了同一张票被卖两次)