|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
其实产生见解的过程就是训练自己发现问题,分析问题的能力。根据以上的认识我想谈下传统的学习与通过视频独立学习的优缺点:
从线程中前往数据和向线程传送数据相似。也能够经由过程类成员和回调函数来前往数据。但类成员在前往数据和传送数据时有一些区分,上面让我们来看看它们区分在哪。
1、经由过程类变量和办法前往数据
利用这类办法前往数据必要在挪用start办法后才干经由过程类变量或办法失掉数据。让我们先来看看例程2-13会失掉甚么了局。
package mythread;
public class MyThread extends Thread
{
privateString value1;
private String value2;
public void run()
{
value1 = "经由过程成员变量前往数据";
value2 = "经由过程成员办法前往数据";
}
public static void main(String[] args) throws Exception
{
MyThread thread = new MyThread();
thread.start();
System.out.println("value1:" + thread.value1);
System.out.println("value2:" + thread.value2);
}
}
运转下面的代码有大概输入以下的了局:
value1:null
value2:null
从下面的运转了局看很不一般。在run办法中已对value1和value2赋了值,而前往的倒是null。产生这类情形的缘故原由是挪用start办法后就立即输入了value1和value2的值,而这里run办法还没有实行到为value1和value2赋值的语句。要制止这类情形的产生,就必要等run办法实行完后才实行输入value1和value2的代码。因而,我们能够想到利用sleep办法将主线程举行提早,如能够在thread.start()后加一行以下的语句:
sleep(1000);
如许做可使主线程提早1秒后再往下实行,但如许做有一个成绩,就是我们怎样晓得要提早多长工夫。在这个例子的run办法中只要两条赋值语句,并且只创立了一个线程,因而,提早1秒已充足,但假如run办法中的语句很庞大,这个工夫就很难展望,因而,这类办法其实不不乱。
我们的目标就是失掉value1和value2的值,因而,只需判别value1和value2是不是为null。假如它们都不为null时,就能够输入这两个值了。我们可使用以下的代码来到达这个目标:
while (thread.value1 == null || thread.value2 == null);
利用下面的语句能够很不乱地制止这类情形产生,但这类办法太泯灭体系资本。人人能够假想,假如run办法中的代码很庞大,value1和value2必要很长工夫才干被赋值,如许while轮回就必需一向实行下往,直到value1和value2都不为空为止。因而,我们能够对下面的语句做以下的改善:
while (thread.value1 == null || thread.value2 == null)
sleep(100);
<p>
而学习JAVA我觉得最应该避免的就是:只学习,不思考,只记忆,不实践! |
|