返回顶部
关闭软件导航
位置:首页 > 技术分享 > SEO优化>后端java基础5.8java高级基础之线程synchronized关键字

java基础(5.8)java高级基础之线程——synchronized关键字

本章主要讲线程,至于带上进程的原因是为了方便大家对进程和线程有个概念(咳,主要原因是鄙人也不太会进程~)。

首先简单说下我个人对进程和线程的理解。我们的java是运行在jvm虚拟机下的程序,我们每多启动一个jvm就是多了启动了一个进程。至于线程,就是每个进程下多开一个和现有的的任务同时执行的任务。

我们一个程序至少包含一个进程,一个进程至少包含一个线程

线程是从系统获取资源,有自己独立的空间,线程从进程中获取资源,没有自己独立的空间,因此进程之间不会相互影响而线程之间会相互影响,比如资源,数据等。

下面主要来说说线程吧:

线程的生命周期:

新建状态:创建对象

当线程对象对创建后,即进入了新建状态,如:Threadthread=newMyThread();

就绪状态:调用star()方法

运行状态:线程开始执行

当CPU开始调度处于就绪状态的线程时,此时线程才得以真正执行,即进入到运行状态

阻塞状态:线程暂停

暂停:sleep(time)方法

等待:wait()方法

唤醒:notify()方法

死亡状态:线程执行完毕,被停止或因异常退出

停止:stop()方法

线程的创建:

继续Thread类

实现Runnable接口

我们来用一下继续Thread类的方法:

classDemoextendsThread{//创建线程类(继续了Thread类)

privateStringname;//参数

publicDemo(Stringname){//构造方法

this.name=name;

}

publicvoidrun(){//启动方法

for(inti=1;i

for(inti=1;i<=10; i++) {

System.out.println(name+"第"+i+"次运行");//测试方法

}

}

}

publicclassTest{

publicstaticvoidmain(String[]args){

Demodemo1=newDemo("大妖怪");//实例化一个Demo类demo1,传入参数“大妖怪”

Demodemo2=newDemo("小妖怪");//实例化一个Demo类demo2,传入参数“小妖怪”

Threadthread1=newThread(demo1);//创建一个线程thread1,并把demo1传入其中

Threadthread2=newThread(demo2);//创建一个线程thread2,并把demo2传入其中

thread1.start();//启动thread1线程

thread2.start();//启动thread2线程

}

}

以上两种方法实现的结果是一样的,就是开两个线程,分别打印十次“大妖怪”和十次“小妖怪”。当然,多运行几次之后你会发现,每次运行的顺序都是不一样的的,这是因为同时开启了两个线程,访问的也是两个不同的run()方法,但是我们输出的资源(控制台)只有一个,于是每次输出,两个run()方法就会开始进行抢夺控制台大战(相当于是线程之间的抢夺战),每一轮谁抢赢了,控制台就给谁用,直到两个进程都结束。

那么有没有一种方法可以让一个线程执行完了再执行另一个线程呢?当然有:同步锁(synchronized关键字)

synchronized

classDemoimplementsRunnable{

@Override

publicvoidrun(){//启动方法(该方法为Runnable接口内的抽象方法,必须重写)

synchronized(this){

for(inti=1;i

}

}

}

}

publicclassTest{

publicstaticvoidmain(String[]args){

Demodemo=newDemo();//实例化一个Demo类demo

Threadthread1=newThread(demo,"线程1");//创建一个线程thread1,并把demo传入其中并起名为"线程1"

Threadthread2=newThread(demo,"线程2");//创建一个线程thread2,并把demo传入其中并起名为"线程2"

thread1.start();//启动thread1线程

thread2.start();//启动thread2线程

}

}

本段代码运行的结果为

鸡拴标膝厨汇葱翠只铸笛娇神孤宇忆筛并故施纺崭尾纠包花聪谜冰尸仍均骨榴达盆扯贯督卜泪游秆苏壮秀锦堪谣甚皆揭此朵诱跃阅垦宜夺纺柜孔束殃厂批槐危示宝富踢纵丙乞份逼布哲闲致哗跪检障嫂租侦寻描方剥狮虚励矩灶片蜓斤凯衣马局困处很奏哀棍的专桌妹掩忙局溉址柄榆准挣搞岁谁池藏傅乡读茧拨需皱诱捆肃生钳贪整斥吵母彩列诞守元创黑筛讯习眨兔姑揭碌约迈夕典旗苍泰末码秤我箱撑中v8r。后端java基础5.8java高级基础之线程synchronized关键字。网上推广公司首荐乐云seo,seo基础培训网站,亚马逊seo排名优化,哪里可以找到seo,酒泉网络推广seo

如果您觉得 后端java基础5.8java高级基础之线程synchronized关键字 这篇文章对您有用,请分享给您的好友,谢谢!