您的位置:首页 > 编程语言 > Java开发

java 线程学习

2017-06-27 11:00 85 查看
Java学习笔记:

线程:java语言里的一种特殊功能,进程执行时会分配线程,线程独立执行。需要多条路径切换CPU执行。

 

使用线程是因为两个进程可以独立执行,不相互影响。

创建线程的第一种方式:继承Thread。(父子关系)

Demo  t1 =new demo();

t1.start;

 

第二种方式:实现Runnable。(不影响类继承其他类),接口为了实现扩展功能。

使用的特点:一个类已经继承了其他的类。可以采用实现的方法创建进程任务。

Demo  t3 = new demo();   创建任务。

Thread  t1 = new Thread(t3);   创建线程。

t1.start; 启动线程。

创建Runnable类对象

使用Thread(线程)创建对象,将对象传递给线程。

 

 

1,  定义类的实现Runnable
接口

2,覆盖接口Thread
类创建线程对象,并将线程的任务代码封装到run方法中。

3,通过Thread类创建线程对象,并将Runnable接口的子类对象作为Thread类的构造函数的参数进行传递:因为线程的任务都封装在Runnable
接口子类对象的run方法中。

所以要在线程对象创建时就必须明确要运行的任务。

4,调用线程对象的static
方法开启线程。

(Thread通过实现Runable
来实现线程)

 

(将线程任务单独封装成对象)

继承Thread 类,会变成Thread的实例,会继承所有的方法。

实现Runnbale 方法,仅仅是将线程的任务进行对象的封装。

 

线程开启必须有方法:继承,实现接口对象传递

实现Runnable 的方式好处:

1,将线程的任务从线程的子类中分离出来,进行了单独的封装。

按照面向对象的思想将任务封装成对象。

2,避免了java
单继承的局限性。

所以线程问题以后使用 Runnable
做。


 

买票问题使用多线程实现:

可以用静态static 共用数据解决问题。勉强。

用Runnable 封装票数,

 

线程安全问题出现的情况: 

1,多个线程使用共用数据时

2,操作共享数据的线程代码  

 

当一个线程在执行操作共享数据的多条代码的过程中,其他线程参与了运算。就会导致线程的安全问题。

解决思路:

就是将多条操作共享数据的线程封装起来,在有线程在执行这些代码的时候,其他线程是不可以参与运算的。

Synchronized :同步代码块:

Synchronize(对象)

{

需要被同步的代码;

}

同步的好处和弊端:

解决了线程的安全问题。

效率有一点点低。因为同步外的线程都会判断同步锁。

 

同步的使用前提:多线程才使用同步,多线程使用的为同一个锁才使用。

 

 

 

同步代码块:同步代码块的锁是任意的。

同步函数:主线程开启线程后,占用CPU,执行完语句。同步函数使用的锁是当前的对象
this。

 


两个线程独立执行。

所以同步问题建议使用同步代码块。

 

静态的同步函数使用的锁是  该函数所属字节码文件对象。

可以用getClass 方法获取,也可以当前  类名.class
表示。

 

 

单例:多线程下的单例

 

 


 

 饿汉式单例在单例类被加载时候,就实例化一个对象交给自己的引用;而懒汉式在调用取得实例方法的时候才会实例化对象。

 

 




 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 线程