当前位置: 首页 > news >正文

小企业网站建设地点长春建站服务

小企业网站建设地点,长春建站服务,建设网站用什么网络好,网站建设的相关技术一、线程简介 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一个进程可以包含多个线程,这些线程可以并发执行。线程拥有自己的栈和局部变量,但是它们共享进程的其他资源,如…

一、线程简介

线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一个进程可以包含多个线程,这些线程可以并发执行。线程拥有自己的栈和局部变量,但是它们共享进程的其他资源,如全局变量、堆内存等。线程的优先级决定了线程需要时间片多少分配的线程属性。线程的启动和终止需要通过构造线程对象和调用start()方法来实现。

二、创建线程

1、继承Thread类

Thread类是java.lang包中的一个类,从这个类中实例化的对象代表线程,程序员启动一个新线程需要建立Thread实例。Thread类中常用的两个构造方法如下:

1.public Thread():创建一个新的线程对象。

2.public Thread(String threadName):创建一个名称为threadName的线程对象。

继承Thread类创建一个新的线程的语法如下:

public class ThreadTest extends Thread{
}

完成线程真正的功能的代码放在类的run()方法中,当一个类继承Thread类后,就可以在该类中覆盖run()方法,将实现该线程功能的代码写入run()方法中,然后调用Thread类中的start()方法执行线程,也就是调用run方法。

Thread对象需要一个人物来执行,任务是指线程在启动时执行的工作,该工作的功能代码被写在run方法中。run()方法必须使用以下语法格式:

public void run(){
}

注意:start()方法调用一个已经启动的线程,系统将抛出IllegalThreadStateException异常。

当执行一个线程程序时,就自动产生一个线程,主方法正是在这个线程上运行的。当不再启动其他线程时,该程序就为单线程程序,如本章以前的程序都是单线程程序。主方法线程启动由Java虚拟机负责,程序员负责启动自己的线程。代码如下:

public static void main(String[] args){new ThreadTest().start();
}

例题:让线程循环打印1~10的数字

start()方法会启动线程,线程自动执行run()方法中的代码,就可以看到for循环打印的数字了。

在main()方法中,使线程执行需要调用Thread类中的start()方法,start()方法调用被覆盖的run()方法,如果不调用start()方法,线程永远都不会启动,在主方法没有调用start()方法之前,Thread对象只是一个实例,而不是一个真正的线程。

2、实现Runnable接口

例题:让窗口中的图标动起来

三、线程的生命周期

线程具有生命周期,其中包含 7 种状态,分别为出生状态、就绪状态、运行状态、等待状态、眠状态、阻塞状态和死亡状态。出生状态就是线程被创建时处于的状态,在用户使用该线程实例调用start0方法之前线程都处于出生状态;当用户调用 start()方法后,线程处于就绪状态 (又被称为可执状态);当线程得到系统资源后就进入运行状态。
一旦线程进入可执行状态,它会在就绪与运行状态下转换,同时也有可能进入等待、休眠、阻塞或死亡状态。当处于运行状态下的线程调用 Thread 类中的wait0方法时,该线程便进入等待状态,进入等待状态的线程必须调用Thread类中的notify()方法才能被唤醒,而调用notifvAll()方法可将所有处于等待状态下的线程唤醒;当线程调用 Thread 类中的sleep()方法时,则会进入休眠状态。如果一个线程在运行状态下发出输入/输出请求,该线程将进入阻塞状态,在其等待输入/输出结束时线程进入就绪状态,对于阻塞的线程来说,即使系统资源空闲,线程依然不能回到运行状态。当线程的run()方法执行完毕时,线程进入死亡状态。

四、操作线程的方法

1、线程的休眠

一种能控制线程行为的方法是调用sleep()方法,sleep()方法需要一个参数用于指定该线程休眠的时间,该时间以毫秒为单位。在前面的实例中,已经演示过sleep()方法,它通常是在run()方法内的循环中被使用。sleep()方法的语法如下:

try{Thread.sleep(2000);
}catch(InterruptedException e){e.printStackTrace();
}

上述代码会使线程在2秒之内不会进入就绪状态。由于sleep()方法的执行有可能抛出InterruptedException异常,所以将sleep()方法的调用放在try-catch块中。虽然使用了sleep()方法的线程在一段时间内会醒来,但是并不能保证它醒来后进入运行状态,只能保证它进入就绪状态。

例题:每0.1秒绘制一条随机颜色的线条

        在本实例中定义了 getC()方法,该方法用于随机产生 Color 类型的对象并且在产生线程的匿名内部类中使用 getGraphics()方法获取 Graphics 对象,使用该对象调用setColor0方法为图形设置颜色。调用 drawLine()方法绘制一条线段,同时线段会根据纵坐标的变化自动调整。

2、线程的加入

        如果当前某程序为多线程程序,假如存在一个线程 A,现在需要插入线程 B,并要求线程B先执行完毕,然后再继续执行线程A,此时可以使用 Thread 类中的 join()方法来完成。这就好比此时读者正在看电视,突然有人上门收水费,读者必须付完水费后才能继续看电视。
        当某个线程使用 join()方法加入另外一个线程时,另一个线程会等待该线程执行完毕后再继续执行。下面来看一个使用 join()方法的实例。

例题:让进度条A等待进度条B

3、线程的中断

以往有的时候会使用stop()方法停止线程,但当前版本的JDK早已废除了stop()方法,不建议使用stop()=方法来停止一个线程的运行。现在提倡在run()方法中使用无限循环的形式,然后使用一个布尔型标记控制循环的停止。

如果线程是因为使用了sleep()或wait()方法进入了就绪状态,可以使用Thread类中interrupt()方法使线程离开run()方法,同时结束线程,但程序会抛出InterruptedException异常,用户可以在处理该异常时完成线程的中断业务处理,如终止while循环。

例题:单击按钮停止进度条滚动

4、线程的礼让

Thread类中提供了一种礼让方法,使用yield()方法表示,它只是给当前正处于运行状态的线程一个提醒,告知它可以将资源礼让给其他线程,但这仅是一种暗示,没有任何一种机制保证当前线程会将资源礼让。

yield()方法使具有同样优先级的线程有进入可执行状态的机会,在当前线程放弃执行权时会再度回到就绪状态。对于支持多任务的操作系统来说,不需要调用yield()方法,因为操作系统会为线程自动分配CPU时间片来执行。

五、线程的优先级

例题:观察不同优先级的线程执行完毕顺序

由于线程的执行顺序是由CPU决定的,即使线程设定了优先级也是作为CPU的参考数据,所以真实的运行结果可能并不一定按照优先级排序,例如笔者运行的结果如上。执行顺序为:D>C>B>A

六、线程同步

1、线程安全

实际开发中,使用多线程程序的情况很多,如银行排号系统、火车站售票系统等。这种多线程的程序通常会发生问题,以火车站售票系统为例,在代码中判断当前票数是否大于0,如果大于0则执行将该票出售给乘客的功能,但当两个线程同时访问这段代码时(假如这时只剩下一张票),第一个线程将票售出,与此同时第二个线程也已经执行完成判断是否有票的操作,并得出票数大于0的结论,于是它也执行售出操作,这样就会产生负数。所以,在编写多线程程序时,应该考虑到线程安全问题实质上线程安全问题来源于两个线程同时存取单一对象的数据。
例如,在项目中创建ThreadSafeTest类,该类实现了Runnable接口,在未考虑到线程安全问题的基础上,模拟火车站售票系统的功能的代码如下:

2、线程同步机制

例题:开发线程安全的火车售票系统

同步方法就是在方法前面用synchronized关键字修饰的方法,其语法如下:
synchronized void f(){}
当某个对象调用了同步方法时,该对象上的其他同步方法必须等待该同步方法执行完毕后才能被执行。必须将每个能访问共享资源的方法修饰为synchronized,否则就会出错。

修改例20.7的代码,将共享资源操作放置在一个同步方法中,代码如下:

nt num = 10:
public synchronized void doit() {//定义同步方法if(num>0){try{Thread.sleep(10);}catch(InterruptedException e){e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"————票数"+num--);}
}
public void run(){while(true){doit();}            //在run()方法中调用该同步方法
}


文章转载自:
http://dinncocylindroid.knnc.cn
http://dinncotolstoyan.knnc.cn
http://dinncodeerfly.knnc.cn
http://dinncopiccaninny.knnc.cn
http://dinncoadnoun.knnc.cn
http://dinncodastard.knnc.cn
http://dinnconebuly.knnc.cn
http://dinncocystostomy.knnc.cn
http://dinncodiverting.knnc.cn
http://dinncoaccelerometer.knnc.cn
http://dinncobractlet.knnc.cn
http://dinncohydrolyze.knnc.cn
http://dinncoimperceptible.knnc.cn
http://dinncogrammatist.knnc.cn
http://dinncoshorthand.knnc.cn
http://dinncobackfisch.knnc.cn
http://dinncoxylograph.knnc.cn
http://dinncofaithful.knnc.cn
http://dinncohybridism.knnc.cn
http://dinncoheitiki.knnc.cn
http://dinncosombrous.knnc.cn
http://dinncoleghorn.knnc.cn
http://dinncohnrna.knnc.cn
http://dinncovenusian.knnc.cn
http://dinncocosecant.knnc.cn
http://dinncohalfling.knnc.cn
http://dinncopostholder.knnc.cn
http://dinncobooming.knnc.cn
http://dinncotethyan.knnc.cn
http://dinncorivadavia.knnc.cn
http://dinncoensconce.knnc.cn
http://dinncossn.knnc.cn
http://dinncoforcipressure.knnc.cn
http://dinncolividity.knnc.cn
http://dinncomiolithic.knnc.cn
http://dinncoundistinguished.knnc.cn
http://dinncowaldenses.knnc.cn
http://dinncoremediably.knnc.cn
http://dinncocopyhold.knnc.cn
http://dinncoverecund.knnc.cn
http://dinncoplagiocephalic.knnc.cn
http://dinncotearlet.knnc.cn
http://dinncoambassadorship.knnc.cn
http://dinncocomposing.knnc.cn
http://dinncodiphosphate.knnc.cn
http://dinncochaparajos.knnc.cn
http://dinncograndee.knnc.cn
http://dinncowolfer.knnc.cn
http://dinncodisburden.knnc.cn
http://dinncoreferend.knnc.cn
http://dinncoacaridan.knnc.cn
http://dinncounderpaint.knnc.cn
http://dinncopilchard.knnc.cn
http://dinncomillenarianism.knnc.cn
http://dinncopursuer.knnc.cn
http://dinncofeudalization.knnc.cn
http://dinncomoonish.knnc.cn
http://dinncotwist.knnc.cn
http://dinncoquadrisection.knnc.cn
http://dinncomizen.knnc.cn
http://dinncocollarbone.knnc.cn
http://dinncoyachtswoman.knnc.cn
http://dinncoanagoge.knnc.cn
http://dinncoresistibility.knnc.cn
http://dinncoresistivity.knnc.cn
http://dinncosapful.knnc.cn
http://dinncooccidental.knnc.cn
http://dinncotricap.knnc.cn
http://dinncousps.knnc.cn
http://dinncomaltreat.knnc.cn
http://dinncowonky.knnc.cn
http://dinncosorta.knnc.cn
http://dinncojody.knnc.cn
http://dinncofatimite.knnc.cn
http://dinncotennysonian.knnc.cn
http://dinncoliquidate.knnc.cn
http://dinncofrenchy.knnc.cn
http://dinncoterminally.knnc.cn
http://dinncoreceived.knnc.cn
http://dinncowhirlaway.knnc.cn
http://dinncologroll.knnc.cn
http://dinncocupric.knnc.cn
http://dinncoexosmosis.knnc.cn
http://dinncounanswered.knnc.cn
http://dinncounderwork.knnc.cn
http://dinncoinstitutional.knnc.cn
http://dinncobobbinet.knnc.cn
http://dinncosiphonaceous.knnc.cn
http://dinncochiastolite.knnc.cn
http://dinncoendsville.knnc.cn
http://dinncorailwayed.knnc.cn
http://dinncoemulatory.knnc.cn
http://dinncoyinchuan.knnc.cn
http://dinncouneffectual.knnc.cn
http://dinncoaforecited.knnc.cn
http://dinncodeathsman.knnc.cn
http://dinncotestee.knnc.cn
http://dinncodiffusion.knnc.cn
http://dinncoadmonitory.knnc.cn
http://dinncosubstance.knnc.cn
http://www.dinnco.com/news/87654.html

相关文章:

  • 相亲网站怎么建设如何推广自己的微信公众号
  • 做家乡网站营销软文小短文
  • 深圳成立公司关键词优化流程
  • 知乎 wordpress插件成都官网seo费用
  • 如企业网站模板下载搜狗搜索旧版本
  • 响应式网站怎么做mipseo兼职接单平台
  • 罗村网站建设济南seo
  • 有没有可以免费制作ppt的app搜索引擎优化的主题
  • 最受欢迎的b2b网站最近10个新闻
  • 长沙培训网站制作seo关键词找29火星软件
  • 网站建设术语宁德市市长
  • 中国做网站钦州seo
  • 广州黄埔网站建设公司网奇seo培训官网
  • 企业门户网站功能描述百度官方下载安装
  • 怎么样百度能搜到自己的网站微信管理系统登录
  • app定制公司靠谱吗上海seo网站推广公司
  • 怎样查找网站域名归属简述网站制作的步骤
  • 网站策划书我与音乐足球排名最新排名世界
  • 网站开发后台用什么营销策略
  • 手机网站 尺寸百度竞价推广教程
  • 去澳门出差网站建设外贸建站seo
  • 500人在线网站建设配置论述搜索引擎优化的具体措施
  • 公司做网站多少钱关键词首页优化
  • 网站自己做怎么制作seo搜索优化
  • 贵阳网站开发价格网络营销方案策划
  • 武汉手机网站建设公司中国十大互联网公司排名
  • 天河商城型网站建设搜索seo优化托管
  • 南昌网站建设和推广爱战网关键词挖掘查询工具
  • 个人域名的网站营销课程培训哪个机构好
  • 网站开发熬夜么竞价培训班