上一页 1 ··· 8 9 10 11 12 13 14 下一页
摘要: 老实说,看完这部电影,心理真的不是滋味。虽然这是一部日本电影,讲述的是日本那边的IT企业的情况,但是看完后还真的是感触良多,甚至是对程序员的工作有了新的认识。是的,是新的认识!我现在也是一新手程序员,是自学的程序员,跟主角比起来,只是我在读大学,而差不多明年就要找工作了,但是并不认为我的技能就比主角要强,我可以这么说,我比主角要弱多了!虽然主角是高中退学,但是我相信,他的能力已经远远超过我了,至少他能在短时间内就将他从没有做过的工作完成。我现在真的对将来的就业开始产生恐惧感。怕找不到工作,如果自己的能力无法在接下来的一年内得到切实的提升,而是浑浑噩噩的过下去,那么,真的不是开玩笑的,能否找到. 阅读全文
posted @ 2012-09-04 20:25 文酱 阅读(686) 评论(0) 推荐(1) 编辑
摘要: Future到底是什么东西?很多人都对这个东西感到特别奇怪(好吧,我承认,那个很多人就只是我自己而已),就我现在的理解,因为本人在并发这方面没有多少实践经验,所以只好就着一些资料和自己的理解给它下个定义,Future就是保存我们任务的完成信息,比如说,任务中会通过返回某些东西告诉别人它已经结束了,而Future中就保存了这种信息。利用Futu保存和得到任务的结果的用法如下: Future<String> future = threadPool.submit(new Callable<String>(){ @Override public St... 阅读全文
posted @ 2012-09-02 23:38 文酱 阅读(13104) 评论(2) 推荐(1) 编辑
摘要: 我想了很久,还是无法得出一个准确的答案。如果从匿名内部类和局部内部类的存在意义来说的话,它们对于外围类的方法来说,都是不可见的,但是不可见,只是方法无法使用它们,并不能说明什么,内部类的方法和变量还是可以访问的,只要有创建实例。所以,问题就可以归于以下几点的解决:1.如果内部类的引用不是final,会怎么样?这问题从引用是final这点就已经解释了。因为final是不能修改该引用所指向的对象,所以如果不是final,该引用所指向的对象可以被修改。问题又来了:2.为什么引用一定不能被修改? 如果修改了会怎样?我们都知道,别名现象的存在,使得指向同一个对象的引用,如果其中的引用被修改,另一个... 阅读全文
posted @ 2012-09-01 16:37 文酱 阅读(1111) 评论(0) 推荐(0) 编辑
摘要: 重构,在我们的程序设计中真的是非常重要的东西,它的作用,甚至可以说是魔法,能让我们的代码焕发生机,散发出优美的味道。因为重构并不能说是程序语言的语法,所以对于重构的介绍在市面上是比较少的,尤其是真正掷地有声的权威著作,只能靠我们在自己的每次实践中不断实践,不断思考。就以我自己的一次重构经历来说。 这次我是打算将传送过来的字符串按照一定的方式输出到控制台,所以,做的是解析字符串的工作。这种工作本来可以是用正则表达式来做的,但是因为正则表达式这方面,说真的,实在是太让人纠结了,基本上,当我想用时,总是用不好(实际上是焦头烂额!)。而且,这次有了org.JSON这个库的支持,所以这方面的工作可... 阅读全文
posted @ 2012-08-29 15:39 文酱 阅读(375) 评论(0) 推荐(0) 编辑
摘要: 线程中是可以再添加其他线程,这是通过添加join()方法,但是效果确实等待一段时间直到第二个线程结束才继续执行。如果某个线程在另一个线程t上调用t.join(),此线程将会被挂起,直到目标线程t结束才恢复。对join()方法的调用可以被中断,就是在调用线程上调用interrupt()方法,这时就需要try-catch子句。 阅读全文
posted @ 2012-08-28 17:23 文酱 阅读(668) 评论(0) 推荐(0) 编辑
摘要: 所谓的阻塞,就是线程能够运行,但是某个条件阻止它的运行,当线程处于阻塞状态时,调度器将忽略线程,不会分配给线程任何CPU时间,直到线程重新进入就绪状态,它才有可能执行操作。就绪并代表是在运行啊,所谓的就绪,就是可运行也可不运行,只要调度器分配时间片给线程,线程就可以运行,因为我们都知道,调度器是如何分配线程,是不确定的。为什么任务会进入阻塞的状态,一般有以下几个原因: 1.通过调用sleep(milliseconds)使任务进入休眠状态,在这种情况下,任务在指定的时间内不会运行; 2.通过调用wait()使线程挂起,直到线程得到了notify()或notifyAll()消息(或者... 阅读全文
posted @ 2012-08-28 17:22 文酱 阅读(12738) 评论(1) 推荐(0) 编辑
摘要: 线程的终止其实很简单,只要在实现Runnable的类中添加cancel()方法和cancel标记。如: private static volatile boolean canceled = false; public static void cancel(){ canceled = true;} 注意,这里是volatile标记的static布尔值,因为这是接下来的方法中都会用到的,而且其值的变化会对它们产生影响,所以是static。volatile就像之前说过的,标记这个布尔值为共享的,使得接下来的与其有直接或者间接的synchronized方法都能看到它的变化,然后就是设置一... 阅读全文
posted @ 2012-08-28 17:21 文酱 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 在任务的协作中,是需要任务间的协议,而这份协议,正如之前所说的,正是通过锁来实现。但是,有时候,这协议会错失,就是没有被其他任务正确的接收到。信号的错失会导致错误,所以,我们要为避免信号错失而做出努力,因为信号的错失是可能导致出现死锁的,只要是使用锁,就要避免出现死锁这种局面。这问题的解决方案就是防止在唤醒条件上产生竞争,因为很多时候的错失都是因为对唤醒条件的竞争,如:T1: synchronized(sharedMonitor){ <setup condition for T2> sharedMonitor.notify(); } T2: while(som... 阅读全文
posted @ 2012-08-28 17:20 文酱 阅读(289) 评论(0) 推荐(0) 编辑
摘要: 任务不仅是只有竞争的关系,还有协作。所谓的协作,就是一般意义上的协作,多个任务同时完成同一个问题的各个部分。所以,现在问题已经不是任务间的干涉,而是任务间的协调。因为在这类问题中,某些部分必须在其他部分被解决前解决,而且,在这些任务中,某些是可以并发执行的。某些甚至是所有任务都结束后进行,就像建房子一样,总得建完地基后才能开始往上建吧。 所以,任务的协作的关键就是任务间的协议。怎样才能实现这种协议呢?还是使用互斥,也就是锁。没错,你没有看错,就是使用锁来实现协作。为什么可以呢?明明协作与竞争在字面上来说,应该是相反的啊,但是基本构成是可以一样的啊。因为锁能够确保只有一个任务可以响应某个信号.. 阅读全文
posted @ 2012-08-28 17:19 文酱 阅读(290) 评论(0) 推荐(0) 编辑
摘要: 什么是死锁?死锁就是这样的情况,某个任务在等待另一个任务,而后者又在等待别的任务,这样一直下去,直到这个链条上的任务又在等待第一个任务释放锁。这就是一个任务间互相等待的连续循环,没有哪个线程能继续。死锁的可怕并不在于它马上发生,可怕的是任何加锁的程序够可能发生死锁的危险。防止死锁是设计并发编程一开始就必须考虑的事情。要防止死锁,就必须知道死锁的发生条件。 会产生死锁必须满足一下四个条件: 1.互斥条件。任务在使用的资源中至少有一个是不可能共享的; 2.至少有一个任务它必须持有一个资源且正在等待获取一个当前被别的任务持有的资源; 3.资源不能被任务抢占,任务必须把资源释放当做普... 阅读全文
posted @ 2012-08-28 17:19 文酱 阅读(269) 评论(0) 推荐(0) 编辑
上一页 1 ··· 8 9 10 11 12 13 14 下一页