java多线程

来源:互联网 发布:sql去重复查询多个字段 编辑:程序博客网 时间:2024/06/03 19:55

线程和进程:每一个java程序都是一个进程,每个进程都有自己独特的资源(即内存空间),进程之间资源不共享,所有进程都是同步操作的,进程可能需要同时进行多个操作,每一个操作可以看成一个线程,线程之间资源共享,每一个线程都是进程的组成部分,所有的线程都可以共享进程的资源。
主线程:main方法开启主线程,是不需要我们创建的线程,主线程分配的资源最多,也是用来响应用户操作的。
一般我们创建的线程都是子线程,
(子)线程的创建:
第一种方法:1.创建一个类继承Thread类型
2.复写run方法
3.在主线程处创建一个子线程的对象,来调用start方法
4.Thread.sleep(1000);进行时间间隔限制,1000表示线程每执行一次操作就暂停1秒钟。

第二种方法:1.创建一个类实现Runable方法
2.复写run方法,添加线程内容
3.启动线程

每个线程都有自己的唯一id,在线程创建的时候就被分配好的,线程运行的次序是高度不可控的线程可以使用类的属性方法
一个简单的线程调用实例:

public class MyThread extends Thread{//继承Thread方法    private static int ticket = 23;    private Object obj;    public MyThreads(String name,Object obj) {        super(name);        this.obj=obj;        // TODO Auto-generated constructor stub    }    @Override    public void run() {        // TODO Auto-generated method stub        super.run();        while(true){            synchronized (obj){                if(ticket<23){                    return;                }    System.out.println(Thread.currentThread().getName()+ticket --);            }        }}}
public class MyThread1 implements Runable{//实现Runable接口private static int ticket = 23;@Override    public void run() {        while(true){            fun();        }    }    public synchronized void fun(){        if(ticket<0){            return;        }        System.out.println(ticket--);    }}

调用:

public static void main(){MyThread  m=new MyThread new Thread(m).start();Object obj1 = new Object();MyThreads ms1 = new MyThreads("1号:",obj1);  ms1.start();}

synchronized关键字,实现同步锁机制,一般修饰方法,类,代码块,其作用的范围是大括号{}括起来的部分,作用对象是调用该部分的对象
一个线程访问一个对象中的synchronized代码块时,其他试图访问该对象的线程将被阻塞,也就是说,当两个并发线程(thread1和thread2)访问同一个对象(syncThread)中的synchronized代码块时,在同一时刻只能有一个线程得到执行,另一个线程受阻塞,必须等待当前线程执行完这个代码块以后才能执行该代码块,两个线程互斥,只有当一个线程执行完毕,释放资源解锁之后,另一个线程才能执行并锁定该对象。

参考资料:http://blog.csdn.net/luoweifu/article/details/46613015