JAVA多线程笔记总结(上)

android培训java培训期待与您交流! ----------



1. 进程:是一个正在执行的程序
   --每个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫一个 控制单元


   线程:就是进程中的一个独立的控制单元
   --线程在控制进程的执行


2. 多线程的创建方式: (2种)
---第一种方式: 继承Thread 
--第一步,创建一个类继承Thread
--第二步,复写Thread类中的run方法
  --目的,将自定义代码存储在run方法,让线程运行


--第三部,调用线程的start方法
  -作用是启动线程
  -调用run方法


---第二种方式: 实现Runnable接口
--第一步,创建类实现Runnable接口
--第二步,覆盖Runnable接口中的run方法
--第三步,通过Thread类建立线程对象
--第四部,将Runnble接口的子类对象作为实际参数传递给Thread类的构造函数
--第五步,调用Thread类的start方法方法开启线程并调用Runnble接口子类的run方法


3. static Thread currentThread().getName():获取当前线程名称 
 


4. 实现方式和继承方式有什么不同:
---实现Runnable接口,实现了数据共享
---实现的好处,避免了继承的局限性
---定义线程时,建立使用实现方式
---继承Thread,线程代码存放在Thread子类中
---实现方式


5. 多线程的安全问题:
---同步代码块:synchronized(对象)
 {
 同步的代码
 }
---同步函数:写在方法上

  


7. 售票的实例,引出了第二种创建线程的方式(*******)
  |-- 实现Runnable接口,覆盖run方法
  |-- 建立Thread类对象,传递实现Runnable接口的子类对象
  |-- 调用Thread类中的run方法
  |-- 第二种方式,可以实现对象中的数据共享
  |-- 避免的单继承的局限性


8. 安全问题(synchronized)


9. 同步代码块
    synchronized(this)  ****同步
    {
    }


    synchronized(类名.class)
    {
    }


10. 安全问题的解决
  |-- 数据被多个线程访问
  |-- 这些线程是不是持有同一把锁


11. 死锁的案例 
  

12. 安全高效的懒汉式 


13. Thread方法
 |-- run负责线程中运行的代码
 |-- Thread(String name),构造的时候,传递线程名
 |-- getName()获取线程名
 |-- setName()设置线程名
 |-- Thread.currentThread().getName()获取线程名,在非Thread子类中使用
 |-- start()开启线程,JVM调用线程的run方法
 
//卖票程序代码示例


class Ticket implements Runnable//extends Thread
{
private int tick = 1000;
Object obj = new Object();
public void run()
{
while(true)
{
 
synchronized(obj)//同步代码块
{
if(tick>0)
try
{
Thread.sleep(100);
System.out.println(Thread.currentThread().getName()+"-sale:  "+tick--);
}
catch (Exception e)
{
}
  }
  
}


}
}
class TicketDemo
{
public static void main(String[] args)  
{
Ticket t = new Ticket();


Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
Thread t3 = new Thread(t);
         t1.start();
         t2.start();
         t3.start();
      
         
}
}
 


//代码示例2

class Test extends Thread
{
//private String name;
public void run()
{
for (int x=0;x<20 ;x++ )
{
System.out.println(Thread.currentThread().getName()+"  RUN--------");
}

}


}
class ThreadDemo
{
public static void main(String[] args)  
{
private String name; 
Test t1 = new Test();
Test t2 = new Test();
Test t3 = new Test();
Test t4 = new Test();

t1.start();
t2.start();
t3.start();
t4.start();
for (int x=0;x<100 ;x++ )
{
System.out.println(Thread.currentThread().getName()+"  MAIN************");
}
}


}
 





单例模式 (安全的代码示例)

class Single
{
private Single(){}
private static Single s = null;


public static Single getInstance()
{
if(s==null)
   {
synchronized(Single.class)
{
     if(s==null)
  {
    try{Thread.sleep(15);}catch(Exception e){}
    s = new Single();
  }
     return s;
}
 }
 return s;
}



class TestSingle implements Runnable
{
public void run()
{
 while(true)
{
      Single s = Single.getInstance();
  System.out.println(s);
   }
}
}
class  SafeSingle
{
public static void main(String[] args) 
{
TestSingle t = new TestSingle();


Thread t1 = new Thread(t);
Thread t2 = new Thread(t);

t1.start();

t2.start();

}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值