Java class线程源代码学习全过程

开发 后端
Java class线程学习的过程中有很多的问题,其实在源代码中就能找打这些问题的解决方案。下面我们就来详细的学习下有关问题的解决方案。

Java class线程需要我们不断的学习,在长期的使用中会出现很多的问题,下面我们就从Java class线程的源代码中看看如何才能更好的解决相关问题,希望大家有所收获。

  1. class Test {  
  2. public static void main(String[] args) {  
  3. //定义Object对象o  
  4. Object o = new Object();  
  5. //定义Runclass对象r  
  6. Runclass r = new Runclass();  
  7. //注意这里,没有将对象o和对象r的引用传递给两个线程  
  8. Thread1 t1 = new Thread1();  
  9. Thread2 t2 = new Thread2();  
  10. t1.start();  
  11. t2.start();  
  12. }  

 

问题:两个线程类的成员变量没有赋值方法,也没有初始化,所以其引用为空,在调用时会抛出NullPointerException

解决:两个线程类的构造方法修改一下

  1. Thread1(Runclass r, Object o) {  
  2. this.r = r;  
  3. this.o = o;  
  4. }  
  5. Thread2(Runclass r, Object o) {  
  6. this.r = r;  
  7. this.o = o;  
  8. }  
  9. 调用方法变成:  
  10. public static void main(String[] args) {  
  11. Object o = new Object();  
  12. Runclass r = new Runclass();  
  13. Thread1 t1 = new Thread1(r, o);  
  14. Thread2 t2 = new Thread2(r, o);  
  15. t1.start();  
  16. t2.start();  

 

这样就解决了NullPointerException不过程序其他地方还有问题,程序会抛IllegalMonitorStateException这涉及到线程同步,楼主对wait的理解还不够,可以看看相关资料。在这个程序中,需要将同步的地方改成o.wait();和o.notify();因为锁定的对象是Object o。
 

【编辑推荐】

  1. Java多线程如何解决关键字封锁问题
  2. Java多线程中wait语句的具体使用方法
  3. Java多线程如何创建多个线程
  4. Java多线程优化之偏向锁原理分析
  5. Java多线程初学者指南系列教程
责任编辑:张浩 来源: 博客园
相关推荐

2017-04-25 18:03:11

Caffe深度学习框架

2011-02-22 10:46:02

Samba配置

2012-11-06 10:19:18

Java自定义加载Java类

2011-08-30 18:01:20

2011-04-18 15:56:10

软件测试

2009-12-08 17:56:16

WCF配置

2009-04-13 12:37:18

2011-01-21 17:51:52

2011-09-06 15:38:20

QT安装

2010-11-19 10:11:49

Oracle物化视图

2010-03-01 17:01:03

Python编程技巧

2009-06-10 16:55:42

cygwin netb安装

2010-03-10 13:24:45

Zend Debugg

2010-06-17 13:10:09

Linux Grub修

2011-03-11 10:39:02

YUM安装LAMP

2010-07-21 14:51:19

telnet-serv

2019-05-14 15:27:31

MongoDB自动备份数据库

2010-06-12 10:03:20

Ubuntu Grub

2010-06-11 13:15:07

UML软件

2009-12-15 16:51:32

点赞
收藏

51CTO技术栈公众号