进程:是程序的一次动态执行过程,对应了从代码加载,执行至执行完毕的一个完整的过程。是系统运行的基本单位,每一个进程都有自己独立的内存空间和系统资源,内部的数据和状态都是完全独立的。
线程:线程是进程中执行运算的最小单位,可完成一个独立的顺序控制流程,每个进程中至少建立一个线程(主线程)来作为程序运行的入口点。如果进程中同时运行了多个线程来完成不同的工作,则成为多线程。线程在操作系统的管理下并发执行。(表面上看上去是多个线程同时执行,是因为不同的线程切换时间很短,但是实际上每一个时间点还是只有一个线程在执行)
并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。
并行:是计算机系统中能同时执行两个或更多个处理的一种计算方法。
Java中实现多线程:提供了Thread类支持多线程编程
**主线程:**java程序启动时,一个线程立刻运行,这个线程就是主线程。public static void main()是主线程的入口,每个进程都至少有一个主线程。
作用:他是产生其他子线程的线程,他必须最后完成执行,因为要执行各种关闭动作。
案例:控制主线程
public class ThreadMethod {
public static void main(String[] args) {
Thread t=Thread.currentThread();//主线程的引用
System.out.println("当期的线程是:"+t.getName());//getName()返回线程名称
t.setName("MyJavaThread");//改变线程名称
System.out.println("当期的线程是:"+t.getName());//getName()返回线程名称
}
}
Java创建线程类有两种方法:
1.继承Thread类创建线程
2.实现Runnable接口
继承Thread类创建线程继承Thread类并重写Thread类的run()方法,run()方法是线程要执行操作任务的方法,所以线程要执行的操作代码都要写在run( )方法里,并通过调用Start( )方法启动线程后调用。
步骤:
1.自定义MyThread类继承Thread类
2.重写run( )方法,再run()方法中实现数据输出
3.创建线程对象,调用start( )方法启动线程
案例(注意体会run()和start()区别)
package test;
public class MyThread extends Thread{//继承Thread类
@Override
public void run() {//重写run()方法
for(int i=1;i<100;i++){
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MyThread my=new MyThread();
MyThread my2=new MyThread();
//my.run();my2.run();//直接调用run方法的话和*调用实例方法*没有区别,是单线程的执行模式
/*启动线程调用Start()方法表示线程处于启动状态,
等待分配资源执行run方法,在多个线程同时启动时是交替运行的*/
my.start();
my2.start();
}
}
实现Runnable接口:直接继承Thread类的方式有一个缺点,如果继承了其他类就不能继承Thread类了(因为一个类继承只能一次),所以通常使用实现Runnable接口方式。一个类可以通过实现Runnable接口并实现其run()方法完成线程的所有活动,已实现的run方法成为线程对象的线程体。
步骤:
1.自定义MyRunnable类实现Runnable接口,并实现接口的run()方法,在run方法中输出数据。
2.创建MyRunnable类对象myrunnable。
3.创建一个Thread类的对象myThread,将myrunnable对象作为Thread类的构造方法的参数传入
4.调用myThread对象的start()方法启动线程
案例:
public class MyRunnable implements Runnable{//继承Runnable接口
//重写run()方法
@Override
public void run() {
for(int i=1;i<100;i++){
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
public class Test {
public static void main(String[] args) {
MyRunnable myrun=new MyRunnable();//创建MyRunnable类对象myrun
Thread t1=new Thread(myrun);//将myrun作为Thread构造方法的参数传入
Thread t2=new Thread(myrun);
t1.start();//启动线程
t2.start();
}
}