多线程

什么是进程:

正在执行的程序.

什么是线程:

线程就是进程执行中的一个控制流程.

一个进程中至少有一个控制流程.

仅有一个控制流程的程序称为单线程.

多线程:

一个进程中当有多个控制单元时,就称为多线程程序.

多线程的好处:

1.提高程序的执行效率.

2.可以让多部分代码同时执行.

多线程的特性:

随机性.

线程的状态:

计算机生成了可选文字:线 程 的 四 种 状 态 被 创 建 start() stop() sleep() 运 行 sleep() run() 结 束 stop() wait() 冻 结 notify() 消 亡 单 筐 是 慧 , , s | e 万 法 要 指 定 捶 眠 时 间 ,

 

创建线程方式:

1.继承Thread

  1)继承Thread.

  2)复写run方法,将多线程需要运行的代码存入该方法中.

  3)创建Thread的子类对象.(创建线程).

  4)调用对象的start方法开启线程.(start方法做了两个动作,开启线程,调用run方法)

2.实现Runnable接口

  1. 定义线程代码所属类实现Runnable接口。
  2. 复写Runnable接口中的run方法,将多线程要运行的代码存入其中。
  3. 创建Runnable接口的子类对象。
  4. 创建Thread类的对象,并将Runnable接口的子类对象做为参数传递给Thread类多大构造函数
  5. 调用Thread类对象的start方法开启线程并执行指定的run方法。

多线程中的不安全隐患解决:

只要在同一时间段,只让一个线程将这些操作同一资源的代码执行完即可。

数据同步方式来解决多线程不安全隐患;

实现原理:通过带锁的代码块将容易出现问题的代码进行封装。

同步好处:解决线程安全问题。

同步弊端:降低了运行效率。(判断锁较为消耗资源)

 同步表现形式:

1.同步代码块

示例:

synchronized(对象锁){

// 需要被同步的代码(哪些需要同步,哪些不需要同步一定要分清楚)

System.out.println("同步代码块");

}

2.同步函数

示例:

public synchronized void syncFunction(){

System.out.println("同步函数");

}

同步的前提:

1.必须是两个或者两个以上的线程。

2.多个线程必须使用同一个锁。

线程中的优先级:可以提高线程抢到资源的频率。

setPriority(int):对优先级进行设定,1~10之间。

自定义线程名称:

可以通过Thread构造函数,也可以通过setName

将线程标记为守护线程:

线程分:前台线程和后台线程,当前台线程运行完成时,无论是否有后台线程还在存活都会结束,jvm结束。

setDaemon(boolean);

join()方法:主线程调用了thread.join()方法,主线程会释放资源(执行权),等待thread线程结束后再继续执行,那么这时主线程是处于冻结状态,只有thread结束它才会恢复可运行状态。

线程示例:

/**

 * 线程示例

 * @author Administrator

 *

 */

publicclass MyThread extends Thread {

privateString name;

 

MyThread(Stringname) {

this.name= name;

}

 

publicvoid run() {

for(int i = 0; i < 10; i++) {

System.out.println(Thread.currentThread().getName()

+".....name = " + name + "..." + i);

}

}

}

 

多线程函数示例:

/**

 * 多线程同步代码块

 * @author Administrator

 *

 */

public classMorThread implements Runnable {

 

privateint tick = 100;

privateObject obj = new Object();

 

/**

 *线程运行方法(同步代码块)

 */

publicvoid run() {

while(true) {

 

synchronized(obj) {

if(tick > 0) {

System.out.println(Thread.currentThread().getName()+ " "

+tick--);

}else {

break;

}

}

}

}

}

 

/**

 * 多线程同步函数

 *

 * @author Administrator

 *

 */

public classMorThreadFunction implements Runnable {

privateint tick = 100;

 

publicvoid run() {

while(true) {

if(tick <= 0)

break;

show();

}

}

 

privatesynchronized void show() {

if(tick > 0) {

try{

Thread.sleep(100);

}catch (Exception ex) {

}

System.out.println(Thread.currentThread().getName()+ "...剩余票数:"

+tick--);

}

}

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值