第二十六:多线程程序的常见误区

1.

局部变量,每个线程都有一个拷贝,而且是互不影响的.......重要!

局部变量会覆盖成员变量(临近原则)

2.

多线程的同步:

为什么要引入同步机制?

在多线程环境中,可能会有两个甚至更多的线程试图同时访问一个有限的资源。必须对这种

潜在资源冲突进行预防。

解决方法:在线程使用一个资源时为其加锁即可。访问资源的第一个线程为其加上锁以后,

其他线程不能再使用那个资源,除非被解锁。

3.死锁(互斥锁问题)

public class TestDeadLock2 {
 public static void main(String[] args) {
  char[] a = { 'A', 'B', 'C' };
  char[] b = { 'D', 'E', 'F' };
  MyThread7 t1 = new MyThread7(a, b);
  MyThread7 t2 = new MyThread7(b, a);
  t1.start();
  t2.start();
 }
}

class MyThread7 extends Thread {
 private char[] source;

 private char[] dest;

 public MyThread7(char[] source, char[] dest) {
  this.source = source;
  this.dest = dest;
 }

 public void run() {
  synchronized (source) {
   try {
    Thread.sleep(1000);
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
   synchronized (dest) {
    // 从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
    System.arraycopy(source, 0, dest, 0, source.length);
    System.out.println(dest);
   }
  }
 }
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值