多线程(1)

来源:互联网 发布:telnet端口连接失败 编辑:程序博客网 时间:2024/06/06 05:44

进程:是程序的一次动态执行过程,对应了从代码加载,执行至执行完毕的一个完整的过程。是系统运行的基本单位,每一个进程都有自己独立的内存空间和系统资源,内部的数据和状态都是完全独立的。

线程:线程是进程中执行运算的最小单位,可完成一个独立的顺序控制流程,每个进程中至少建立一个线程(主线程)来作为程序运行的入口点。如果进程中同时运行了多个线程来完成不同的工作,则成为多线程。线程在操作系统的管理下并发执行。(表面上看上去是多个线程同时执行,是因为不同的线程切换时间很短,但是实际上每一个时间点还是只有一个线程在执行)

并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行

并行:是计算机系统中能同时执行两个或更多个处理的一种计算方法。


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();    }}