java 多线程

实例

class MyThread extends Thread {
    
    private int i = 0;

    @Override
    public void run() {
        for (i = 0; i < 100; i++) {
            System.out.println(Thread.currentThread().getName() + " " + i);
        }
    }
}
public class ThreadTest {

    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            System.out.println(Thread.currentThread().getName() + " " + i);
            if (i == 30) {
                Thread myThread1 = new MyThread();     // 创建一个新的线程  myThread1  此线程进入新建状态
                Thread myThread2 = new MyThread();     // 创建一个新的线程 myThread2 此线程进入新建状态
                myThread1.start();                     // 调用start()方法使得线程进入就绪状态
                myThread2.start();                     // 调用start()方法使得线程进入就绪状态
            }
        }
    }
}

start 和 run的区别

线程的几种状态http://lavasoft.blog.51cto.com/62575/99153/

线程的名称

  

 

 创建线程的第二种方法

手册中的操作实例

继承方式和实现 方式 的区别

实现方式 避免了继承的局限性。建议是用继承方式

多线程的安全问题

问题产生

问题解决

同步的前提

同步的优点和缺点

 

如果想要函数运行同步程序,只需要用synchronized 来修饰当前 方法

如何发现程序是否有同步的隐患 (多线程操作共享数据)

问题

程序修改  --- 调用同一个对象就是同一个锁了

 如果同步函数被静态修饰呢,上面的同步函数和同步代码块将用的不是一个对象 

 

接下来看下面的问题

 单例模式中 懒汉式设计模式加上 同步锁。解决了并发时重复实例化的问题

每一次进来都进行判断,效率非常的低。 如何解决判断次数过多的问题。

在代码块中加锁,进行双重判断。如果条件不满足就不判断是否有锁了

         

 多线程会产生死锁的问题

http://blog.csdn.net/pjz90/article/details/8655646

 多线程新的操作。原来前面的视频都是旧版本的啊   ::>_<::

Lock  和   Condition

也就是这几步操作 

生产者操作

消费者操作

 停止线程

 

守护线程

如果主线程结束了,此线程自动退出

join

两个线程 和 主线程 在交替执行。 join后, t1拿到执行权,主线程等待,t1执行完,主线程才开始执行。

至于其他子线程没什么太大关系。

 优先级&yield方法

优先级:抢资源的频率

 

默认的优先级都是5  (优先级一共10级)  

1:MIN  ,   5:NORM,10:MAX

 

Java线程中有一个Thread.yield( )方法,很多人翻译成线程让步。顾名思义,就是说当一个线程使用了这个方法之后,它就会把自己CPU执行的时间让掉,让自己或者其它的线程运行。

yield  释放优先级,先让其他线程执行

原文地址:https://www.cnblogs.com/zhaoyang-1989/p/6711240.html