zoukankan      html  css  js  c++  java
  • Java线程相关知识

        -----------疯狂软件Java培训、iOS培训分享-------------

      1、启动线程是start方法还是run方法?

      之所以出现线程,就是为了更好的利用CPU,让她更加“精明”的干活。

      通过调用Thread类的start()方法来启动一个线程,

      这时此线程是处于就绪状态,

      并没有运行。

      然后通过此Thread类调用方法run()来完成其运行操作的,

      这里方法run()称为线程体,

      它包含了要执行的这个线程的内容,

      Run方法运行结束,

      此线程终止,

      而CPU再运行其它线程,

      而如果直接用Run方法,

      这只是调用一个方法而已,

      程序中依然只有主线程--这一个线程,

      其程序执行路径还是只有一条,

      这样就没有达到写线程的目的。

      记住:线程就是为了更好地利用CPU,

      提高程序运行速率的!

      2、java技术线程的基本状态以及状态之间

      状态:新建、就绪,运行,synchronize阻塞,wait和sleep挂起,结束。wait必须在synchronized内部调用。

      调用线程的start方法后线程进入就绪状态,线程调度系统将就绪状态的线程转为运行状态,遇到synchronized语句时,由运行状态转为阻塞,当synchronized获得锁后,由阻塞转为运行,在这种情况可以调用wait方法转为挂起状态,当线程关联的代码执行完后,线程变为结束状态。

      3、简述synchronized和java.util.concurrent.locks.Lock的异同?

      主要相同点:Lock能完成synchronized所实现的所有功能

      主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。

    4、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1

      package com.yx.zzg;

      public class ThreadTest1 {

      private int j;

      public static void main(String args[]) {

      ThreadTest1 tt = new ThreadTest1();

      Inc inc = tt.new Inc();

      Dec dec = tt.new Dec();

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

      Thread t = new Thread(inc);

      t.start();

      t = new Thread(dec);

      t.start();

      }

      }

      private synchronized void inc() {

      j++;

      System.out.println(Thread.currentThread().getName() + "-inc:" + j);

      }

      private synchronized void dec() {

      j--;

      System.out.println(Thread.currentThread().getName() + "-dec:" + j);

      }

      class Inc implements Runnable {

      public void run() {

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

      inc();

      }

      }

      }

      class Dec implements Runnable {

      public void run() {

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

      dec();

      }

      }

      }

      疯狂软件学院依托强大的师资力量和就业优势,课程实战强,培养的学员素质高技术过硬。疯狂软件学院成为了国内知名的Java培训平台,向社会输送大量的IT人才,赢得了学员和企业的良好口碑。Java培训,专业Java培训机构,高中以上学历均可参加,疯狂软件学院学员毕业后入职名企拿高薪,

      疯狂软件Java培训fkjava、iOS培训新年钜惠,报名Java就业班免费赠送Java基础班,报名iOS就业班免费赠送iOS基础班,本月火速抢座中,为回报广大新老学员,值此新年之际推出报读就业班赠送基础班的活动。

  • 相关阅读:
    (转)SpringMVC学习总结
    Golang-函数的defer
    Golang-闭包
    Golang-匿名函数
    Golang-init()
    Golang-递归
    Golang-函数、包、变量的作用域
    Golang-for、break、continue、goto、return
    Golang-程序流程控制 if、switch
    Golang-进制、源码反码补码、位运算
  • 原文地址:https://www.cnblogs.com/gojava/p/3549348.html
Copyright © 2011-2022 走看看