java 线程学习

本文介绍了Java中创建线程的两种主要方法:继承Thread类和实现Runnable接口,并讨论了这两种方法的区别及适用场景。此外,还探讨了线程安全问题及其解决方案——使用synchronized关键字实现同步代码块。

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 表示。

 

 

单例:多线程下的单例

 

 

 

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

 

 





 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值