-----------疯狂软件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基础班,本月火速抢座中,为回报广大新老学员,值此新年之际推出报读就业班赠送基础班的活动。