线程

来源:互联网 发布:javascript主要用途 编辑:程序博客网 时间:2024/06/04 18:02

转载请注明出处

一.

1.进程和线程

2.多线程程序运行模式

3.定义线程的方法

二.

1.实现线程的第二种方法

2.控制线程的常用函数

三.

1.多线程数据安全

2.同步线程的方法


一.

多线程和多进程

多进程:在操作系统中能(同时)运行多个任务(程序)

多线程:在同一应用程序中有多个顺序流(同时)执行


Runnable就绪状态,只是准备开始运行


创建线程的方法

方法1.定义一个线程类,它继承类Thread并重写其中的方法run(),方法run()             成为线程体;

          由于Java只支持单继承,用这种方法定义的类不能再继承其它类。

方法2.提供一个实现接口Runnable的类作为线程的目标对象,再初始化一个Thread             类或者Thread子类的线程对象时,把目标对象传递给这个线程实例,由该目标           对象提供线程体。


方法1程序:

class FirstThread extends Thread{public void run(){for(int i =0;i<100;i++){System.out.println("FirstThread-->"+i);}}}

class Test{public static void main(String args[]){  //生成线程类的对象FirstThread ft = new FirstThread();  //启动线程  ft.start();  //ft.run();千万不能这样写    for(int i =0;i<100;i++){System.out.println("main-->"+i);}}}
结果:


二.

方法2程序:

class RunnableImpl implements Runnable{public void run(){for(int i =0;i<100;i++){System.out.println("Runnable"+i);}}}

class Test2{public static void main (String args[]){//生成一个Runnable借口实现类的对象RunnableImpl ri = new RunnableImpl();//生成一个Thread对象,并将Runnable接口实现类的对象作为参数//传递给该Thread对象Thread t = new Thread(ri);//通知Thread对象,执行start方法t.start();}}



三.同步线程的方法

class MyThread implements Runnable{int i = 100;public void run(){while(true){System.out.println(Thread.currentThread().getName()+i);i--;Thread.yield();if(i<0){break;}}}}


class Test{public static void main(String args[]){MyThread myThread = new MyThread();//生成两个Thread对象,但是这两个Thread对象公用同一个线程体Thread t1 = new Thread(myThread);Thread t2 = new Thread(myThread);//每一个线程都有名字,可以通过Thread对象的setName()方法设置线程名字,也可以使用getName方法获取对象;t1.setName("线程a");t2.setName("线程b");t1.start();t2.start();}}
结果:

可以看出数字是混乱的

修改myThread ,加入同步锁synchronized(this){}

class MyThread implements Runnable{int i = 100;public void run(){while(true){synchronized(this){System.out.println(Thread.currentThread().getName()+i);i--;Thread.yield();if(i<0){break;}}}}}

结果:

数字是连续的,但a与b交替。

         同步锁里面的程序就是所谓的同步代码块,括号里面的this是一个对象,代表调用run()的对象。

         这个代码的执行过程:a获得了同步锁,也就是把同步锁占住了,比如有一个浴室,谁拿到牌子,谁就可以去洗澡,另外一个人就要等;a执行同步代码块中的代码执行到一半,CPU被b抢走,b运行,但是发现同步锁被a拿走了,b不能执行代码块里面的程序,必须等待,等待到a重新执行,一直等a执行完后,a释放这个锁,然后b拿到锁后,b才可以执行同步代码块里面的程序。



0 0