关于作者

用户名:Junexue
笔名:Junexue
地区: 上海-Shanghai
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



老 友 记

IT 圈

June学英语

站外推荐

访问统计:
文章个数:45
评论个数:41
留言条数:2




Powered by BlogDriver 2.1

飞翔的轨迹

 

飞翔的冲动源于广阔的天空和一颗不甘寂寞的心,而一幅幅交错的飞行的轨迹,编织成你我心中永恒的家园。

文章

给糖糖的信

亲爱的糖糖,

         昨天我们电话里大家弄得很不愉快,这里面很大一部分是作为糖糖你的男友的以及作为男人的我的不对,请接受我的发之内心的歉意!我是深深爱着你的,这点毋庸置疑!下面是我对我们以前争吵思考,并列出了对自己的要求:
         1.控制好自己的情绪

         回想每次争吵的情形,我们两尤其是我,情绪化快而且持绪很长时间,给我们两充分交流设置了障碍,所以我想起于世维在南京邮电讲座时,举他和他老婆的约定的例子,他们结婚之前互相约定,一天之内,当一个人生气的时候,另外一个人不允许再生气。我觉得很有道理,所以我把控制好自己的情绪放在了第一条。

         2.努力说出自己对你的关心

         我了解自己最大的一个缺点就是,嘴巴不甜,我想相处这么久了,你了解我的为人,我也很渴望听到你对我的关心,肯定以及支持等等,所以我会努力做到清楚表达出自己对你的感情。

        3.哈哈,没时间了,你快洗完澡了,下次补充。

                                       深爱你的 June

- 作者: Junexue 2006年09月10日, 星期日 21:44  回复(1) |  引用(0) 加入博采

Ubuntu 6.06 以及 Vmware Tools安装

    今天尝试安装VMWare-tools 来增强鼠标、显示和host os & guest os

之间的共享功能。一切都安装好了,可是期望的功能却没有实现,不知道哪

一步出了什么差错:

     Step1:安装linux kernel header 和 开发环境
                  $sudo apt-get install build-essential linux-headers-'uname -r'

         Step2:将Vmware-tools的压缩包mount到Ubuntu中
                  $mount /dev/cdrom /mnt/cdrom
                  $cp /mnt/cdrom /tmp
                  $cd /tmp
                  $tar zxf vmware-linux-tools.tar.gz
                  $cd /vmware-tools-distrib
                  $./vmware-install.pl
        
          Step3:Config
                  $sudo vi /etc/X11/xorg.conf
                  将Driver "mouse" 改为 Driver "vmmouse"

          $sudo reboot

但并没有达到预期的设想,哪里错了呢?

- 作者: Junexue 2006年08月9日, 星期三 20:02  回复(1) |  引用(0) 加入博采 /p>

初识Ubuntu
摘要:Ubuntu 如今最火的Linux发行版本,不尝试一下就太可惜了,本文纪录了在Win200 Professional系统中,安装Ubuntu虚拟系统的过程... 查看全文

- 作者: Junexue 2006年08月3日, 星期四 20:13  回复(1) |  引用(0) 加入博采

伪“单身“公寓第11天

伪“单身“公寓第11


     mm回家已经有115/6天了,每天回来面对寂静空旷的公寓,感觉比单身时代更加地寂寞。虽然知道是不可能的,但还是每天电话都认真地告诉她,自己有多么的想她,早点回来吧。11 这个数字如今总是让人联想起光棍这个词,尤其是像我现在这种伪“单身“状态的,总是容易想起两个人一起走过的点点滴滴。


最近感觉自己越来越暴躁了,没说几句就会提高声贝,最近几次的争吵肯定吓坏她了;事后狠狠地批评了自己,第一,为什么为了件小事而一般见识呢;第二,作为一个成熟的男人是不会对自己的女人大声发火的。第三,动不动就发脾气,伤和气、伤身体,而且显得笨拙。她的朋友都说她是一个很大方,很容易相处的女孩;她总是能给人带来惊喜和快乐,跟她在一起,可以享受到上海各种美食,我很喜欢她花心思给我买的衣服,搭配合理,穿起来非常舒服。认识你,到你答应做我的女朋友,现在,将来,你都是我心中不可缺少的一部分!


     等你回来!

- 作者: Junexue 2006年08月2日, 星期三 20:37  回复(1) |  引用(0) 加入博采

潜水有错

     潜水有错

     今天又鼓起勇气浏览了自己的Blog,真是惨不能睹亚,几乎没有更新,更别谈跟网友一起分享好文了。既然开了blog,又做不好,真不知说自己什么好了,态度太不积极了,以至于除了成为专业潜水员之外,一点贡献都没有,羞愧中!

     每当我看完
Wang Jian Shuo,王咏刚,以及IBM Tech Group等等的Blog时候,就强烈的发觉,自己缺少点什么。著名职业经理人培训师于世维曾说过伟人之所以成功就是因为他们年轻时就养成了成功的习惯。明显自己犯了好高鹜远的错误,"It's my fault",看你以后的表现了。

     Tell myself,Step By Step.Here record it...

- 作者: Junexue 2006年08月1日, 星期二 20:33  回复(1) |  引用(0) 加入博采

My First Filmloop!

welcome to my filmloop!

- 作者: Junexue 2006年02月25日, 星期六 21:31  回复(1) |  引用(0) 加入博采

情侣百态全记录
摘要:

联手出击
与自己的恋人有同样的情趣爱好,是一种莫大的幸福。*被发现,这已经不是第一次了,但是突然从自己的镜头里面,发现自己被长枪短炮指着,还是有些好玩的感觉。如果我是一名狙击手,我肯定挂了,好在我们都只是摄影爱好者,这搞笑的一幕,只是让我们成为了萍水相逢的朋友

 查看全文

- 作者: Junexue 2005年12月5日, 星期一 10:46  回复(2) |  引用(0) 加入博采

【Nankai】写给05级的师弟,师妹们
摘要:回想起来,曾经的记忆依旧清晰:高考时的紧张,等待分数时的焦躁,收到录取通 知书时的喜极而泣,还有初入南开园时的莫名迷茫。大学,十二年苦读修出的正果;却 在的刹那,却在踏进校门的刹那,突然没有了方向。什么是大学?怎样度过大学? 查看全文

- 作者: Junexue 2005年09月9日, 星期五 15:18  回复(1) |  引用(0) 加入博采

【Nankai】你的左手And我的右手

你的左手And我的右手

八月的阳光如此毒辣,似过分郁闷后的宣泄。

我是猫。我的眼睛已经不适合看太阳裸露的狰狞。有人在街边卖花,他们说:“七夕,
情人节快乐。”

我举着一束马蒂莲回家。白色,无香,奇怪的向上卷的姿势。
 
笑着走路,脚步轻盈。

撞到一个人。小手指上的尾戒朝下滑落,在滚烫的水泥地上发出几声脆的声响。
 
然后,静止。银色的光圈。

我蹲下身去,一手抱花,一手捡拾。

碰到另一个人的左手

你腼腆地缩回手。你说:“对不起。”

有点害羞的笑容。洗的发白的牛仔裤。上衣干净的蓝。瘦。

甚至于手背不经意碰触时的温度,都那么象一个人。

呆怔。

想起那年的学校图书馆,有人自桌下伸出左手,将我五指紧握。

柔软的手指互相缠绕,象午夜花开。

“我可以借用一下你的手吗?”我问。“在过马路的时候。”

你笑,仰起下巴,递过左手。手心潮湿,我抓住你的小指和无名指,在车水马龙中回忆
曾经的温暖。

我已经不涂粉色指甲油了,我的十指涂上清冷的绿色,象猫暗夜窥探的眼睛。


“谢谢。”我放开手。
 
然后,你说确信在哪里见过我。
 
这样的语言是童话还是谎话?

可是,又有什么区别呢?它们一样美丽不堪。

“你的手很冷,现在是八月呢。”

如果,上帝要我在七夕遇见一个要牵我的手的人,我是不是要把我的右手递于他掌心。
任由他紧握?

我们开始成双入对。我和你。自七夕开始。

我们牵着手走过一条街,又一条街,我想我可能爱上你了,牵手的姿势那样符合我的忧
伤。

你的掌心又足够温暖。

我把尾戒套在食指上,有点紧,不过还好,这样也很漂亮。

你的左手,我的右手,固定的姿势,冥冥中相遇的才拧?

我们会一直这样牵手吗?

这样的青年,那样的中年,流金的岁月。

我怀念那些只牵手就会脸红心跳的爱情。我有多怀念,我拉你的手就有多紧。

不论我们着怎样的衣,我都会记得这年的七夕。

你的左手,我的右手。纠缠的姿势。

我们会这样一直到老吧。

在林荫道。

你的左手,我的右手,相互搀扶。
 
一生。

那年的七夕,你我遇见。最美丽的意外。

我会记得,你也要记得。
 

Enjoy love.

From I Love Nankai BBS

- 作者: Junexue 2005年09月9日, 星期五 15:01  回复(0) |  引用(0) 加入博采

【Tips】一个古老的致富原则

一个古老的致富原则

这则巴比伦最有钱人的故事, 看似简单平常, 但在八千年前巴比伦人已经懂得理财 致富之道, 这些原则到现在还是一样可以适用。

   
根据巴比伦出土的陶砖土记载, 巴比伦最有钱的人叫做阿卡德, 很多人羡慕他的富 , 因此向他请教致富之道。

   
阿卡德原来是在担任雕刻陶砖的工作, 有一天, 有一位有钱人欧格尼斯来向他订购一块刻有法律条文的陶砖, 阿卡德说, 他愿意漏夜雕刻, 到天亮时就可以完成,但是唯一的条件是欧格尼斯要告诉他致富的秘诀。欧格尼斯同意这个条件, 因此到天亮时, 阿卡德完成了陶砖的雕刻工作, 欧格尼斯 实践了他的诺言, 他告诉阿卡德 :

  
致富的秘诀是 : 你赚的钱中有一部份要存下来。」

  
「财富就像树一样, 从一粒微小的种耔开始成长, 第一笔你存下来的钱就是你财富成长的种籽, 不管你赚的多么少, 你一定要存下十分之一。」

   
一年后, 当欧格尼斯再来的时候, 他问阿卡德是否有照他的话去做, 把赚来的钱省下十分之一。

   
阿卡德很骄傲的回答, 他确实照他的方法作了, 欧格尼斯就问 :
  
「那存下来的钱, 你如何使用呢?」

   
阿卡德说:「我把它给了砖匠阿卢玛, 因为他要旅行到远地买回菲利人稀有的珠宝, 当他回来的时候,我们将把这些珠宝卖很高的价格,然后平分这些钱。」

   
欧格尼斯责骂说: 「只有傻子才会这么做, 为什么买珠宝要信任砖匠的话呢? 你的存款已经泡汤了! 年轻人, 你把财富的树连根都拔掉了, 下次你买珠宝应该去请教珠宝商, 买羊毛去请教羊毛商, 别和外行人做生意!

   
就如同欧格尼斯所说, 砖匠阿鲁玛被菲利人骗了, 买回来的是不值钱的玻璃,看起来像珠宝.

   
阿卡德再次下定决心存下所赚的钱的十分之一, 当第二年, 欧格尼斯再来的时候,他又询问阿卡德钱存的如何?

   
阿卡德回答 :「我把存下来的钱借给了铁匠去买青铜原料, 然后他每四个月付我一次租金。」

   
欧格尼斯说 : 「很好, 那么你如何使用赚来的租金呢?

   
阿卡德说 : 我把赚来的租金拿来吃一顿丰富大餐, 并买一件漂亮的衣服, 我还计划买一头驴子来骑。」

   
欧格尼斯笑了, 他说 : 你把存下的钱所衍生的子息吃掉了, 你如何期望他们以及他们的子孙能再为你工作, 赚更多的钱?当你赚到足够的财富时, 你才能尽情享用而无后顾之忧。」

   
又过了二年, 欧格尼斯问阿卡德 : 你是否达到梦想中的财富?

   
阿卡德说: 「还没有, 但是我已存下了一些钱, 然后钱滚钱, 钱又滚钱。」

   
阿格尼斯又问 : 「那你是否还向砖匠请教事情?

   
阿卡德说 : 「有关造砖的工作请教他们能得到很好的建议。」

   
欧格尼斯说 : 你已学会了致富的秘诀。首先你学会了从赚来的钱省下钱, 其次你学会了向内行的人请教意见, 最后你学会了如何让钱为你工作, 使钱赚钱。你已学会如何获得财富,保持财富, 运用财富。」

    
早在八千年前的巴比伦人就指出 : 成功的人都是善于管理、维护、 运用创造财富。致富之道在于听取专业的意见, 并且终生奉行不渝。

    
这则古老的智能当中, 蕴含着金钱的五大金科定律。

    
金钱的第一定律 : 金钱是慢慢流向那些愿意储蓄的人。

    
每月至少存入十分之一的钱, 久而久之可以累积成一笔可观的资产。

    
金钱的第二定律 : 金钱愿意为懂得运用它的人工作。

    
那些愿意打开心胸, 听取专业的意见, 将金钱放在稳当的生利投资上, 让钱滚钱,利滚利, 将会源源不断创造财富。

    
金钱的第三定律 : 金钱会留在懂得保护它的的人身边。

    
重视时间报酬的意义, 耐心谨慎的维护它的财富, 让它持续增值, 而不贪图暴利。

    
金钱的第四定律 : 金钱会从那些不懂得管理的人身边溜走。

    
对于拥有金钱而不善经营的人, 一眼望去, 四处都有投资获利的机会, 事实上却处处 隐藏陷阱, 由于错误的判断, 它们常会损失金钱。

    
金钱的第五定律 : 金钱会从那些渴望获得暴利的人身边溜走。

    
金钱的投资报酬有一定的回收, 渴望投资获得暴利的人常被愚弄, 因而失去金钱。
缺乏经验或外行, 是造成投资损失的最主要原因。

 

- 作者: Junexue 2005年09月8日, 星期四 15:28  回复(1) |  引用(0) 加入博采

【一起走过】情感百味系列 II

05暑假片断II

Fragment IV I'm back!

     88,我直接去了学校,悲惨,套间里就一个人,寓前面的两排树倒掉了十来棵,麦莎台风的尾巴还是给上海造成不小的麻烦的.

     8月中,这些日子似乎不太平静,GF跟我闹小别扭,她让我写信给她,而我坚持不写(麻烦),就说她在胡闹(呵呵,千万别学我)。其实每天短信联系,几乎覆盖了我晚上所有休闲时间,写点东西在张江公寓那边不是很方便,那晚我们聊了两个多小时.感觉她心里难受,受了委屈,而我则是始作俑者,该罚!

    公司里,本来816日的Deptartment meeting 由于老大时间冲突,延迟到23,也就是下周二了.   

    终于,她要回来了,19日的票,20日就会回到上海了,我一直琢磨着怎么去西站接她,我想买一束花送给她,可是没什么经验,得回去请教了一下大象,GF这周要回天津了,所以我请客的计划一定要在周日之前.

    19日,她上火车的那天,晚上下班我们一起到张江镇那边的牧羊寨FB一顿火锅,她上火车到不是太担心,毕竟有人送,我担心她一个人在火车上怎么办.晚上我们一个屋里住的七个南开的一边吃一边聊,谁都没想到,毕业后一个地方的南开人的比例会有这么高!没几天HT走了之后,大象也要回家复习考研了,下次见面最快也要大半年之后了吧, & HT一路走好!Good Luck!

    晚上我就买了九朵玫瑰放在了家里,多亏了HT教我怎么浇水保护,才不至于出什么差错,不知道她喜不喜欢!? 她发消息说她遇到了高中好友,看来这一路上她不会感到不适了,lucky!我没有告诉她我买了花,我想给她一点惊喜!!

抱着一把鲜花坐地铁,感觉真那个什么,呵呵,别人瞟过来得目光各异,我正襟危坐,假装坦然接受大家得关注,30多分钟呀!丫丫......

20,在西站门口居然被车站的站警给调侃了,见我拿着一把玫瑰,一片嘘声,”哇哦,是玫瑰花吧?!,是情人回来了吧?!”,也不知道是感叹,还是羡慕.不过, 这逻辑有点乱了!哈哈, 我给了他们一个心知肚明的微笑,潇洒地一甩头走了进去,他们居然都没检查我那个包的意思,我也就进去歇歇脚,又不上火车,所以也就没有必要主动检查了吧 .

大概过了大半个钟头,GF短信交换了一下信息,火车还有十几分种就要进站了,终于我拿着花的手要解放了,呵呵,见面的场景自不必说,我就站在她的那一节车厢门口,所以她一出现,我们就看到了对方,微笑,鲜花,帮她提行李,这一串动作简直堪称完美,哈哈.

我们决定晚上回闵行,本来在宿舍呆着气氛挺好的,不过傍晚的时候有个插曲,对于她的生日我回答错了,我想我真的犯错误了,我再大条也不能记不住她的生日呀.她心里明显有点疙瘩,心情很快就会晴转多云,我提议出去走走,我们就来到了情侣聚集的思源湖边,一边窃窃私语,一边感受着湖边的凉风和湖面轻轻起伏的波纹,我想很多年之后我们都会记得这么一副图画吧.也不知道从哪一刻开始,我们都变得沉默了,我很不习惯她的沉默不语,但又愚笨的不知道怎么去打破,而她呢,一旦沉默就预示着心情会越来越恶劣(后来她这样告诉我得),于是奇怪的一幕出现了,她起立说要走走,我推着车跟在后面,她走得很快,本来我就起步比她迟,所以我们之间有了大概三米的距离,一个拐弯她走进了教学楼,我叫她,她没有回头,我没有一点心里准备她会一个人跑掉,在那一块教室走廊,我没有果然推车过去,等我发现我已经失去她身影的时候已经迟了,我在教学楼(上院)那边呼唤她的名字,以为这只是一个joke,当时估计已经快到11点半了,我手机没带,我在我们一起呆的地方转了很久,以为她只是走错路了,肯定会原路返回的.

可是我错了,她非常不熟悉闵行校园,而且那么晚了,她又是一个人,我急了,思源卡社已经准备关门了,我道了声谦,进去跟老板说想打个电话,但打了三次电话没人接,后来才知道,她的手机快没电了,我绕着湖边骑着车,期待能看到她,但是似乎老天真的在惩罚我,我垂头丧气的回到寝室,用寝室电话又给她打,终于有人接了,我当时舒了一口气,不过她没有提供给我一点周围环境的信息,我让她站在灯光下,我去找.我骑车从上中下院到思源湖,又到DE楼那边,可是还是一无所获,我真的感觉太失败了.差一点00:00我回到了宿舍,马上又给她住的地方挂了一个电话,庆幸她已经回来了,太累了,从早上开始赶车一直到现在,又第一次碰到这种事情,累就一个字!!!

女孩子脾气呀,真是东边日出西边雨,变化也忒快了点,当然这次主要在我,是我让天气骤变的,我想说声:对不起。

第二天,我跟她谈了很久,我常常会忽略她,这也是我们之间经常有摩擦的主要原因吧.感情的事自己要给自己打气,只要爱着对方,就要去珍惜这份感情,bless

总算,,我们之间的感情也像这夏天一样,快速升温着,她回来之后的一周里,刚好她还没有开学,而且住的环境又发生了变化,估计她会很不适应,所以每隔一天我都会去陪她.

825,星期四她的一个高中死党LFX到上海出差,我又荣幸地陪她一起见见这位难得来一次的老友,晚上去长风公园那边逛,好吃的真不少,这晚最失策的就是去了避风塘,那边环境有点安静,人不是很多,我很不适应这样的环境,尤其是三个人的时候,2:1,我完全处于弱势地位嘛,LFX折磨的不行了,我腼腆我承认还不行吗,!做人难呀!

    日子总是飞快,9月又开学了,这个假期的体验比以前所有的假期加起来都多,实习,GF认识的第一个暑假,和本科老友住一起,老友辞职考研,等等.bless所有在外努力生活的朋友们.Bless forever!

                                                       June 2005年9月初记

- 作者: Junexue 2005年09月2日, 星期五 14:16  回复(3) |  引用(0) 加入博采

【一起走过】情感百味系列 I

05暑假片断I

Fragment I  Going home

     7月中,我在张江IBM operation team已经差不多实习了半个月了,渐渐对Lotus/Domino 客户端和服务器熟悉起来,可以比较顺利地维护那些数据库以及修改数据库设计了,这些多亏了以前在这做的复旦帅哥的教导,刚好这边有个z/OS team要修改一个讨论数据库Teamroom以更加方便他们的使用,果然实践出真知,一个星期下来好多细节都难不倒我了.暗自庆幸!

          买了19日的火车票,这个周末最大的任务就是好好陪陪她,我们这不刚刚度过了一个月的静默期,就又要分开,至少得二十几天才能再见面,受不了了!!    

          周末拉,如愿来到她的公寓,晚上玩起了四国麻将,以纸牌为货币,谁先输光,谁下楼买东西吃,呵呵,由于要适应她们那的规则,第一牌我犯了一个小错误,忘了一定要以二五八为头了,不过一场混战下来到也没输,可见我运筹的功力还是那么深不可测呀!^_^

      星期天,我们一起去徐家汇美罗城买数码相机,没想到却买了个手机,是她很喜欢的那种超薄的、黑色机身、红色背景灯,是我们一起挑了很久之后才买到的,价格也很适合,那位柜台里的阿姨还是很厚道的!赞一个!

        中午,我们在美罗城下面的大时代,要了一份水煮鱼,鱼都被油炸的太厉害了,鱼的原味都没了,失败!还好绿豆刨冰不错,小冰山刹那间被我们从底部破坏的摇摇欲坠,两个人你来我往,冰山不倒,战斗不止,呵呵,看她的神情就知道和我有同感!

         她一个晚上都在"研究"新买的手机,超薄的设计,黑色的外壳,最吸引人的是红色的按键灯光,还有通过红外口从售货员那边传过来的pp图片,爱不释手,越看越喜欢,可怜一晚都没怎么理我。

     周一我请假去瑞安那边签合同,早上我还要回闵行拿一下身份证,下午就赶去瑞安,晚上又到张江,这一天我就在地铁公交里度过了.

     她还是跟好朋友一起坐火车回家了,我又回到跟兄弟们开开无关痛痒的玩笑,每天公司,公寓,川湘饭店三点一线的生活.很是舍不得她走,但又没有时间陪她,矛盾呀!每天我们短信联系着,经过前一个月的静默,还有我们这么长时间的相处,她一直影响着我,我的生活从有了她之后就完全变了。

 Fragment II SMS:Short Message,Sir!

     7月下,我和她联系基本靠SMS,偶尔会打个电话,上次在张江公寓这边,她一个电话,我们聊了差不多两个小时,呵呵,住一起的几个老友,将我得称呼从"短信男"迅速升级为"电话王",丫丫的,明显是嫉妒嘛!

     现在周末回闵行大家都还在,无聊中,我回去刚好凑起四人打牌,一战就三四个小时,有时她的短信都来不及回,她后来都快生我的气了.其实打牌是假,大家大声聊天,开怀大笑才是最爽的.除了玩牌,有时大家还一起去游泳,似乎套间里人人一本健康证(游泳必备),一般下午游完,刚好去成都饭店FB一顿,似乎已经成为惯例!

     电视里正在放张丰毅主演的 <历史的天空>虽然很多镜头太假了,不过我喜欢那种畅快淋漓的感觉,大刀向鬼子们的头上砍去,姜大牙投奔共产党的第一次战斗,一把大刀砍到了十几个鬼子;别人送花,姜必达栽花,不得不让人拍手称快.东方闻英的去世,张普景被整疯,一幕一幕,给人的震撼太多了!还有片尾的主题歌,感觉还是震撼!呵呵,看来是太投入了!36集我可是btdown下来,一口气看完了26,还有十集,下周吧!

Fragment III Going home!

      7月底,实习快一个月了,我们team基本上每两周开个会,每次会有一两个人做presention.到现在为止,才开了一次,那一次老大一个人讲了很久,包括远期,近期目标和工作职责分配,我被安排近期做一些AMS系统维护,Lotus/Domino方面的开发应用,长远要研究一下Websphere Portal方面的资料,目标要把我们operation team的服务建一个基于portal的统一门户,最好是能够直接利用现有的一些Domino数据库以及portal的模板开发把类似AMS这样的系统布置到portal.还有网络方面专家,Mr.Chen 讲了一些关于网络setup方的知识,总之一句话收获不小!

      我跟她已经商量好了回家的日程,准备等82日我们开完会我就向老大请假回家一趟,她非常细心(这点比我好多了),给小妹买了件裙子,再加上那次在香港名品街买得漂亮的Dobby红色钱包,可以想象小妹兴奋得笑容,原谅哥出去这么多次都没给你带过礼物.

      83,老大通知我们说从周四开始他要休假直到下周一,我一想,我今天不请假,更待何时?Yeah,明天就回家了,可是我的工资在哪里?建行卡里还是一分钱都没有,身上剩下的钱,回家车票都不够,郁闷,还想给老爸老妈带点什么呢.这个想法又破产了!

        84,一脚踏上车,再下车时候就到家门口了,这个感觉很棒.在车上遇到一个海员回来休假,我骗她,我碰到一个漂亮的老乡,她还真信了,呵呵.也没问那位海员的姓名,总觉的擦肩而过,没有必要留下姓名.跟他聊的很多,因为我有个表弟也曾想过去当海员,但家里因为怕太辛苦而且都是一签五年的,舍不得.他是跑全球航线的,公司说到哪就得去那里,最大的问题就是太无聊,除了VCD基本没什么娱乐活动,我想还有寂寞也是最大的苦恼吧!难以想象一连几个月都漂泊在海上,天天数着归家的日子. 一下车就看到了老妈,还有小妹,等了差不多一个小时了,到家我就把送给小妹的两件礼物拿了出来,小妹笑着追问我,真服了她,还真来劲!是她不让我说,我这招谁了!

      85,今天属于我们一家人,问问老爸老妈的工作,还有小妹的学习,生活,当然免不了被一阵追问,早上还被老妈6点不到就叫起来了,苦也!

       86,打了个电话给高中老友J,让他过来聚聚,J在市一中当了一名历史老师,写了一手好字,一看就知道有老师风范呀,自高中那会我就经常到他家去蹭饭,每次过节他妈都会叫我过去,他妈这人太kind的了!!

      87,可惜由于麦莎台风影响,今天外面下了一天的雨,所以老J日程也就cancel掉了,看来这次回家是聚不成了.

                                                June 2005年8月初记

- 作者: Junexue 2005年08月25日, 星期四 17:52  回复(3) |  引用(0) 加入博采

【实习系列】实习初感

     这周开始正式实习了,team的气氛不错,大家相处的很融洽,办公环境很不错,虽然跟我预想的工作内容有点出入,但确实能够学到东西,老大给我灌输了很多良好学习习惯的重要性,看着身边忙碌的身影,默默给自己加油,要做就要做好!

      上班离学校太远了,所以就住在同学那边了,感觉挺麻烦他们的,想在money上做点贡献,却不知道怎么提芯踝约赫婷挥茫故撬嵌晕姨昧?可是又不是住个一两天,时间常着呢,谁能帮帮我,该怎么自然一点,让大家很好地接受呢?

      又到周末了,可惜那帮同学还要上班,上海夏天用电真的很紧张,他们是周三周四轮休,我实习公司也要限制用电,周四周五电梯什么的有时是停着不开的。上海真是太热了!

      今天她来了,沉默一个多月后,咱们第一次见面,陈劝我努力,我在这方面可能真的很笨拙,她的好友评价我会是个好老公,言下之意,男朋友嘛就不及格了,我琢磨着,这到底是什么意思!我真的不知道如何去投入,给她特别的感觉,她对任何事情和人都不在乎,除了现在跟她在一起生活的人,她其实是一个很开朗的女生,而我恰恰很在乎她说的,在一起很容易吵架,我和她都感到很郁闷!

     不知明天会怎样!?那里有tips!?      

- 作者: Junexue 2005年07月9日, 星期六 23:25  回复(1) |  引用(0) 加入博采

【实习系列】答复

   这两天上海的天气很古怪,气温很高,不过下午突然就会狂风大作,接着暴雨倾盆而下,路上大家纷纷接受夏雨的洗礼。今天对于我来说,是难耐的等待,昨天IBM面试官说今天一定会给我一个消息。

    直到今天早上才睡了一小会,倒不是等待的忐忑,而是半夜和蚊子军团作战,毫无睡意,还除了一身汗!

      上次IBM的Blue path和CSDL我都投了,Blue Path 后来笔试机会都没给,CSDL倒是接受到了笔试通知,昏昏一个傍晚,考了很多java多线程方面的东东,无言!准备的大失偏颇,呵呵。出乎意料,过了三四天接到一个面试通知,当时的心情可想有多么激动,人才终于有了出手的机会!

      一面那天,气温很高,而我又没有像样的皮鞋,所以索性就平常一双沙滩鞋,真是惬意!和面试GG聊的还是很愉快的,问了我很多关于人生方面的问题(这跟实习有关?),难道这样就能看出RP问题?然后就回去等消息。漫长的等待,一个星期,两个星期.....无言的结局!

       本来这个夏天就打算到实验室混混,再学点新鲜的技术什么的,上周的IBM另一个小组的面试通知,让我欣喜若狂,今年暑假实习最后一次机会,我一定要抓住,我默默对自己说!

      今天就有结果了,success or fail?!

       时间凝固在下午5:45,Dr.Wang说我们已经有了决定,认为你还是很不错的,(我想:不会是先杨后抑吧!那你们的决定?)我们选择你,Oh,my God!I've got the chance!

     后天我就要去张江那边了,令人高兴的是,大学里几个酒友也在附近,今天真是太值得纪念了!我得幸运日:6/28

- 作者: Junexue 2005年06月28日, 星期二 20:03  回复(2) |  引用(0) 加入博采

【Java】Java多线程学习笔记
Java多线程学习笔记(一)
 
 

Java多线程学习笔记(一)

作者:陶冶(无邪)

时间:2003.6.18

一、线程类

  Java是通过Java.lang.Thread类来实现多线程的,第个Thread对象描述了一个单独的线程。要产生一个线程,有两种方法:

1、需要从Java.lang.Thread类继承一个新的线程类,重载它的run()方法;

2、通过Runnalbe接口实现一个从非线程类继承来类的多线程,重载Runnalbe接口的run()方法。运行一个新的线程,只需要调用它的start()方法即可。如:

/**=====================================================================

* 文件:ThreadDemo_01.java

* 描述:产生一个新的线程

* ======================================================================

*/

class ThreadDemo extends Thread{

Threads()

{

}



Threads(String szName)

{

super(szName);

}



// 重载run函数

public void run()

{

for (int count = 1,row = 1; row < 20; row++,count++)

{

for (int i = 0; i < count; i++)

{

System.out.print('*');

}

System.out.println();

}

}

}

class ThreadMain{

public static void main(String argv[]){

ThreadDemo th = new ThreadDemo();

// 调用start()方法执行一个新的线程

th.start();

}

}

  线程类的一些常用方法:

  sleep(): 强迫一个线程睡眠N毫秒。

  isAlive(): 判断一个线程是否存活。

  join(): 等待线程终止。

  activeCount(): 程序中活跃的线程数。

  enumerate(): 枚举程序中的线程。

currentThread(): 得到当前线程。

  isDaemon(): 一个线程是否为守护线程。

  setDaemon(): 设置一个线程为守护线程。(用户线程和守护线程的区别在于,是否等待主线程依赖于主线程结束而结束)

  setName(): 为线程设置一个名称。

  wait(): 强迫一个线程等待。

  notify(): 通知一个线程继续运行。

  setPriority(): 设置一个线程的优先级。

二、等待一个线程的结束

  有些时候我们需要等待一个线程终止后再运行我们的另一个线程,这时我们应该怎么办呢?请看下面的例子:

/**=====================================================================

* 文件:ThreadDemo_02.java

* 描述:等待一个线程的结束

* ======================================================================

*/

class ThreadDemo extends Thread{

Threads()

{

}



Threads(String szName)

{

super(szName);
}



// 重载run函数

public void run()

{

for (int count = 1,row = 1; row < 20; row++,count++)

{

for (int i = 0; i < count; i++)

{

System.out.print('*');

}

System.out.println();

}

}

}

class ThreadMain{

public static void main(String argv[]){

//产生两个同样的线程

ThreadDemo th1 = new ThreadDemo();

ThreadDemo th2 = new ThreadDemo();

// 我们的目的是先运行第一个线程,再运行第二个线程

th1.start();

th2.start();

}

}

这里我们的目标是要先运行第一个线程,等第一个线程终止后再运行第二个线程,而实际运行的结果是如何的呢?实际上我们运行的结果并不是两个我们想要的直角三角形,而是一些乱七八糟的*号行,有的长,有的短。为什么会这样呢?因为线程并没有按照我们的调用顺序来执行,而是产生了线程赛跑现象。实际上Java并不能按我们的调用顺序来执行线程,这也说明了线程是并行执行的单独代码。如果要想得到我们预期的结果,这里我们就需要判断第一个线程是否已经终止,如果已经终止,再来调用第二个线程。代码如下:

/**=====================================================================

* 文件:ThreadDemo_03.java

* 描述:等待一个线程的结束的两种方法

* ======================================================================

*/

class ThreadDemo extends Thread{

Threads()

{

}



Threads(String szName)

{

super(szName);

}



// 重载run函数

public void run()

{

for (int count = 1,row = 1; row < 20; row++,count++)

{

for (int i = 0; i < count; i++)

{

System.out.print('*');

}

System.out.println();

}

}

}

class ThreadMain{

public static void main(String argv[]){

ThreadMain test = new ThreadMain();

test.Method1();

// test.Method2();

}

// 第一种方法:不断查询第一个线程是否已经终止,如果没有,则让主线程睡眠一直到它终止为止

 // 即:while/isAlive/sleep

 public void Method1(){

ThreadDemo th1 = new ThreadDemo();

ThreadDemo th2 = new ThreadDemo();

// 执行第一个线程

th1.start();

// 不断查询第一个线程的状态

while(th1.isAlive()){

try{

Thread.sleep(100);

}catch(InterruptedException e){

}

}

//第一个线程终止,运行第二个线程

th2.start();

}



// 第二种方法:join()

public void Method2(){

ThreadDemo th1 = new ThreadDemo();

ThreadDemo th2 = new ThreadDemo();

// 执行第一个线程

th1.start();

try{

th1.join();

}catch(InterruptedException e){

}

// 执行第二个线程

  th2.start();

}



三、线程的同步问题

有些时候,我们需要很多个线程共享一段代码,比如一个私有成员或一个类中的静态成员,但是由于线程赛跑的问题,所以我们得到的常常不是正确的输出结果,而相反常常是张冠李戴,与我们预期的结果大不一样。看下面的例子:

/**=============================================================================

* 文件:ThreadDemo_04.java

* 描述:多线程不同步的原因

* =============================================================================

*/

// 共享一个静态数据对象

class ShareData{

public static String szData = "";

}

class ThreadDemo extends Thread{



private ShareData oShare;

ThreadDemo(){

}

ThreadDemo(String szName,ShareData oShare){

super(szName);

this.oShare = oShare;

}

public void run(){

// 为了更清楚地看到不正确的结果,这里放一个大的循环

  for (int i = 0; i < 50; i++){

if (this.getName().equals("Thread1")){

oShare.szData = "这是第 1 个线程";

// 为了演示产生的问题,这里设置一次睡眠

     try{

Thread.sleep((int)Math.random() * 100);

catch(InterruptedException e){

}

// 输出结果

System.out.println(this.getName() + ":" + oShare.szData);

}else if (this.getName().equals("Thread2")){

oShare.szData = "这是第 1 个线程";

// 为了演示产生的问题,这里设置一次睡眠

     try{

Thread.sleep((int)Math.random() * 100);

catch(InterruptedException e){

}

// 输出结果

System.out.println(this.getName() + ":" + oShare.szData);

}

}

}

class ThreadMain{

public static void main(String argv[]){

ShareData oShare = new ShareData();

ThreadDemo th1 = new ThreadDemo("Thread1",oShare);

ThreadDemo th2 = new ThreadDemo("Thread2",oShare);

th1.start();

th2.start();

}

}

  由于线程的赛跑问题,所以输出的结果往往是Thread1对应“这是第 2 个线程”,这样与我们要输出的结果是不同的。为了解决这种问题(错误),Java为我们提供了“锁”的机制来实现线程的同步。锁的机制要求每个线程在进入共享代码之前都要取得锁,否则不能进入,而退出共享代码之前则释放该锁,这样就防止了几个或多个线程竞争共享代码的情况,从而解决了线程的不同步的问题。可以这样说,在运行共享代码时则是最多只有一个线程进入,也就是和我们说的垄断。锁机制的实现方法,则是在共享代码之前加入synchronized段,把共享代码包含在synchronized段中。上述问题的解决方法为:

/**=============================================================================

* 文件:ThreadDemo_05.java

* 描述:多线程不同步的解决方法--锁

* =============================================================================

*/

// 共享一个静态数据对象

class ShareData{

public static String szData = "";

}

class ThreadDemo extends Thread{



private ShareData oShare;

ThreadDemo(){

}

ThreadDemo(String szName,ShareData oShare){

super(szName);

this.oShare = oShare;

}

public void run(){

// 为了更清楚地看到不正确的结果,这里放一个大的循环

  for (int i = 0; i < 50; i++){

if (this.getName().equals("Thread1")){

// 锁定oShare共享对象

synchronized (oShare){

oShare.szData = "这是第 1 个线程";

// 为了演示产生的问题,这里设置一次睡眠

      try{

Thread.sleep((int)Math.random() * 100);

catch(InterruptedException e){

}

// 输出结果

System.out.println(this.getName() + ":" + oShare.szData);

}

}else if (this.getName().equals("Thread2")){

// 锁定共享对象

synchronized (oShare){

oShare.szData = "这是第 1 个线程";

// 为了演示产生的问题,这里设置一次睡眠

      try{

Thread.sleep((int)Math.random() * 100);

catch(InterruptedException e){

}

// 输出结果

System.out.println(this.getName() + ":" + oShare.szData);

}

}

}

}

class ThreadMain{

public static void main(String argv[]){

ShareData oShare = new ShareData();

ThreadDemo th1 = new ThreadDemo("Thread1",oShare);

ThreadDemo th2 = new ThreadDemo("Thread2",oShare);

th1.start();

th2.start();

}

}



  由于过多的synchronized段将会影响程序的运行效率,因此引入了同步方法,同方法的实现则是将共享代码单独写在一个方法里,在方法前加上synchronized关键字即可。

  在线程同步时的两个需要注意的问题:

  1、无同步问题:即由于两个或多个线程在进入共享代码前,得到了不同的锁而都进入共享代码而造成。

  2、死锁问题:即由于两个或多个线程都无法得到相应的锁而造成的两个线程都等待的现象。这种现象主要是因为相互嵌套的synchronized代码段而造成,因此,在程序中尽可能少用嵌套的synchronized代码段是防止线程死锁的好方法。

  在写上面的代码遇到的一个没能解决的问题,在这里拿出来,希望大家讨论是什么原因。

/**=============================================================================

* 文件:ThreadDemo_06.java

* 描述:为什么造成线程的不同步。

* =============================================================================

*/

class ThreadDemo extends Thread{

//共享一个静态数据成员

private static String szShareData = "";

ThreadDemo(){

}

ThreadDemo(String szName){

super(szName);

}

public void run(){

// 为了更清楚地看到不正确的结果,这里放一个大的循环

  for (int i = 0; i < 50; i++){

if (this.getName().equals("Thread1")){

     synchronized(szShareData){

szShareData = "这是第 1 个线程";

// 为了演示产生的问题,这里设置一次睡眠

     try{

Thread.sleep((int)Math.random() * 100);

catch(InterruptedException e){

}

// 输出结果

System.out.println(this.getName() + ":" + szShareData);

}

}else if (this.getName().equals("Thread2")){

synchronized(szShareData){

szShareData = "这是第 1 个线程";

// 为了演示产生的问题,这里设置一次睡眠

      try{

Thread.sleep((int)Math.random() * 100);

catch(InterruptedException e){

}

// 输出结果

System.out.println(this.getName() + ":" + szShareData);

}

}

}

}

class ThreadMain{

public static void main(String argv[]){

ThreadDemo th1 = new ThreadDemo("Thread1");

ThreadDemo th2 = new ThreadDemo("Thread2");

th1.start();

th2.start();

}

}

  这段代码的共享成员是一个类中的静态成员,按理说,这里进入共享代码时得到的锁应该是同样的锁,而实际上以上程序的输入却是不同步的,为什么呢??

四、Java的等待通知机制
  在有些时候,我们需要在几个或多个线程中按照一定的秩序来共享一定的资源。例如生产者--消费者的关系,在这一对关系中实际情况总是先有生产者生产了产品后,消费者才有可能消费;又如在父--子关系中,总是先有父亲,然后才能有儿子。然而在没有引入等待通知机制前,我们得到的情况却常常是错误的。这里我引入《用线程获得强大的功能》一文中的生产者--消费者的例子:
/* ==================================================================================
 * 文件:ThreadDemo07.java
 * 描述:生产者--消费者
 * 注:其中的一些注释是我根据自己的理解加注的
 * ==================================================================================
 */

// 共享的数据对象
 class ShareData{
  private char c;
  
  public void setShareChar(char c){
   this.c = c;
  }
  
  public char getShareChar(){
   return this.c;
  }
 }
 
 // 生产者线程
 class Producer extends Thread{
  
  private ShareData s;
  
  Producer(ShareData s){
   this.s = s;
  }
  
  public void run(){
   for (char ch = 'A'; ch <= 'Z'; ch++){
    try{
     Thread.sleep((int)Math.random() * 4000);
    }catch(InterruptedException e){}
    
    // 生产
    s.setShareChar(ch);
    System.out.println(ch + " producer by producer.");
   }
  }
 }
 
 // 消费者线程
 class Consumer extends Thread{
  
  private ShareData s;
  
  Consumer(ShareData s){
   this.s = s;
  }
  
  public void run(){
   char ch;
   
   do{
    try{
     Thread.sleep((int)Math.random() * 4000);
    }catch(InterruptedException e){}
    // 消费
    ch = s.getShareChar();
    System.out.println(ch + " consumer by consumer.");
   }while(ch != 'Z');
  }
 }

class Test{
 public static void main(String argv[]){
  ShareData s = new ShareData();
  new Consumer(s).start();
  new Producer(s).start();
 }
}

  在以上的程序中,模拟了生产者和消费者的关系,生产者在一个循环中不断生产了从A-Z的共享数据,而消费者则不断地消费生产者生产的A-Z的共享数据。我们开始已经说过,在这一对关系中,必须先有生产者生产,才能有消费者消费。但如果运行我们上面这个程序,结果却出现了在生产者没有生产之前,消费都就已经开始消费了或者是生产者生产了却未能被消费者消费这种反常现象。为了解决这一问题,引入了等待通知(wait/notify)机制如下:
  1、在生产者没有生产之前,通知消费者等待;在生产者生产之后,马上通知消费者消费。
  2、在消费者消费了之后,通知生产者已经消费完,需要生产。
下面修改以上的例子(源自《用线程获得强大的功能》一文):

/* ==================================================================================
 * 文件:ThreadDemo08.java
 * 描述:生产者--消费者
 * 注:其中的一些注释是我根据自己的理解加注的
 * ==================================================================================
 */

class ShareData{
 
 private char c;
 // 通知变量
 private boolean writeable = true;

 // ------------------------------------------------------------------------- 
 // 需要注意的是:在调用wait()方法时,需要把它放到一个同步段里,否则将会出现
 // "java.lang.IllegalMonitorStateException: current thread not owner"的异常。
 // -------------------------------------------------------------------------
 public synchronized void setShareChar(char c){
  if (!writeable){
   try{
    // 未消费等待
    wait();
   }catch(InterruptedException e){}
  }
  
  this.c = c;
  // 标记已经生产
  writeable = false;
  // 通知消费者已经生产,可以消费
  notify();
 }
 
 public synchronized char getShareChar(){
  if (writeable){
   try{
    // 未生产等待
    wait();
   }catch(InterruptedException e){}  
  }
  // 标记已经消费
  writeable = true;
  // 通知需要生产
  notify();
  return this.c;
 }
}

// 生产者线程
class Producer extends Thread{
 
 private ShareData s;
 
 Producer(ShareData s){
  this.s = s;
 }
 
 public void run(){
  for (char ch = 'A'; ch<= 'Z'; ch++){
   try{
    Thread.sleep((int)Math.random() * 400);
   }catch(InterruptedException e){}
   
   s.setShareChar(ch);
   System.out.println(ch + " producer by producer.");
  }
 }
}

// 消费者线程
class Consumer extends Thread{
 
 private ShareData s;
 
 Consumer(ShareData s){
  this.s = s;
 }
 
 public void run(){
  char ch;
  
  do{
   try{
    Thread.sleep((int)Math.random() * 400);
   }catch(InterruptedException e){}
  
   ch = s.getShareChar();
   System.out.println(ch + " consumer by consumer.**");
  }while (ch != 'Z');
 }
}

class Test{
 public static void main(String argv[]){
  ShareData s = new ShareData();
  new Consumer(s).start();
  new Producer(s).start();
 }
}

  在以上程序中,设置了一个通知变量,每次在生产者生产和消费者消费之前,都测试通知变量,检查是否可以生产或消费。最开始设置通知变量为true,表示还未生产,在这时候,消费者需要消费,于时修改了通知变量,调用notify()发出通知。这时由于生产者得到通知,生产出第一个产品,修改通知变量,向消费者发出通知。这时如果生产者想要继续生产,但因为检测到通知变量为false,得知消费者还没有生产,所以调用wait()进入等待状态。因此,最后的结果,是生产者每生产一个,就通知消费者消费一个;消费者每消费一个,就通知生产者生产一个,所以不会出现未生产就消费或生产过剩的情况。

五、线程的中断
  在很多时候,我们需要在一个线程中调控另一个线程,这时我们就要用到线程的中断。用最简单的话也许可以说它就相当于播放机中的暂停一样,当第一次按下暂停时,播放器停止播放,再一次按下暂停时,继续从刚才暂停的地方开始重新播放。而在Java中,这个暂停按钮就是Interrupt()方法。在第一次调用interrupt()方法时,线程中断;当再一次调用interrupt()方法时,线程继续运行直到终止。这里依然引用《用线程获得强大功能》一文中的程序片断,但为了更方便看到中断的过程,我在原程序的基础上作了些改进,程序如下:


参考:用线程获得强大的性能

- 作者: Junexue 2005年06月26日, 星期日 15:40  回复(1) |  引用(0) 加入博采