1.进程和线程 多进程:操作系统同时运行多个任务;
多线程:就是进程执行中的一个流程;
2.多线程程序运行模式
单线程和多线程
3.定义线程方法
线程也是个对象。
创建线程方法:
1、定义一个线程类,继承Thread并重写其中的方法run(),run里面的代码称为线程体。
(java只支持单继承,用这种方法定义的类不能继承其他类java)
启动线程:对象.start(),调用了的run方法。
2、第二种方法
1)建立Runnable类的对象(线程的任务);
2)生成一个Thread对象,并将Runnable接口实现类的对象作为参数传递给该Thread对象;
ri是Runnable接口实现类的对象,执行工人。
Thread t = new Thread(ri),
3)通知Thread对象执行start()方法;
两种方案的区别:由于java单继承,第二种方法好处是线程的线程体和执行线程给拆分开了。
建议用第二种。
4.线程简单的控制方法
1)中断线程
-Thread.sleep() //休眠
-Thread.yield() //让出CPU,重新抢
2) 设置线程的优先级(最大10,最小1,可用静态常量来设置 MAX_PRIORITY)
-getPriority() //获取优先级
-setPriority() //设置优先级
优先级高执行的概率越大,并不是第一个执行。
4.多线程的数据安全(访问完整性)
多线程同用同一份数据的时候会产生该错误。并发性问题,引起竞争状态。
情况: 生成的两个Thread对象,但是这两个Thread对象共用同一个线程体;
每个线程都有名字,可以通过Thread对象的setName()方法设置线程名字。也可以使用getName方法获取线程的名字,分别启动两个线程。
同步线程解决方法:同步代码块(同步锁)
synchronized(this){}
5.synchronized
1)同步代码块作用:
一旦一个线程获得了一个对象的同步锁,那么这个对象上所有其他的同步的代码都是不能被其他
线程执行的,都需要等待同步锁被释放后执行。
synchronized(对象)
2)同步方法:
public synchronized void fun1()
锁住的对象也是this(调用这个函数的对象)
3)同步方法和同步代码块区别:
同步代码块指定具体哪个对象。同步方法锁住的就是调用这个函数的对象