2005年11月的归档

JAVA线程.5.

| | Comments(0) | TrackBacks(0)
Daemon线程
  不是每个try后的finally都会执行。
  看看下面的代码,
public class DaemonThread extends Object implements Runnable {
  public void run() {
    System.out.println("entering run()");
    int i = 0;
    try {
      System.out.println("in run() - currentThread()="
        + Thread.currentThread());
      while (true) {
      try {
        Thread.sleep(500);
      } catch (InterruptedException x) {
      }
      System.out.println("in run() - woke up again  " + (++i));
    }
   } finally {
    System.out.println("leaving run()");
   }
 }
}

public class DaemonThreadMain extends Object {
 public static void main(String[] args) {
   System.out.println("entering main()");
   Thread t = new Thread(new DaemonThread());
   t.setDaemon(true);
   
t.start();
   try {
    Thread.sleep(3000);
   } catch (InterruptedException x) {
   }
   System.out.println("leaving main()");
  }
}

  得到的结果里,会发现并没有前一个DaemonThread类的finally的打印结果。Daemon线程区别一般线程之处是:主程序一旦结束,Daemon线程就会结束,并且也不会调用finally里的语句。

     Any Java thread can be a daemon thread. Daemon threads are service providers for other threads running in the same process as the daemon thread. For example, the HotJava browser uses up to four daemon threads named "Image Fetcher" to fetch images from the file system or network for any thread that needs one. The run() method for a daemon thread is typically an infinite loop that waits for a service request.

 When the only remaining threads in a process are daemon threads, the interpreter exits. This makes sense because when only daemon threads remain, there is no other thread for which a daemon thread can provide a service.

  To specify that a thread is a daemon thread, call the setDaemon() method with the argument true. To determine if a thread is a daemon thread, use the accessor method isDaemon().

再见口福居

| | Comments(0) | TrackBacks(0)
  今天早上几乎横穿了大半个北京城。
  从最西边的地铁一号线坐起,再到二号线,再转13号城铁,估计没有人早上上班会像我这么远了吧(不知上海有没有是坐着磁悬浮再转地铁上班的!!)。
  因为今天大老板要过来,所以我不能迟到的太离谱。开完简单的会,我感觉到这边项目时间的紧迫性,同时也很为难,毕竟有些事情还没解决完。
  中午,那位负责视频编码底层开发的工程师请我吃饭,竟然带我到了附近大运村的口福居吃火锅,呵,是好久没吃了,吃的还真香。这个时候,交流一下工作上的事情到是主要的,吃饭往往只是辅助而以。为什么我每一次来口福居都有人请我吃饭呢!呵~
  回去和bobo又交流了一下,发现我这负责的一块真的是非常重要的一个环节,看完这一堆文档以后,就该准备人员招聘的事宜了,得好好筹划,这个项目大的超出了我事先的料想,得有一个好的team先。

今日正式供暧

| | Comments(0) | TrackBacks(0)
  其实昨天晚上回去摸了下暖气片,就发现已经有些发烫了。
  呵,又要昐来一个温暖的北京冬天了。msn上有好友把名字已经改成了“期待2005年的第一场雪”,当然我也很期昐。
  这应该是我在北京的第三个冬天了,对北京的冬天,我总是很有feel,长安街,地铁,公交车,行人,车流,还有空气中那种干冷的味道。
  在这,秋天特别的短,以至于我在两年前的11月刚下从广州到北京的火车,北京就用一场雪来欢迎我们这一路人,当时有很多广东的同学没有见过雪,我想,他们当时一定很兴奋。
  昨晚一边看金马奖的颁奖录相,一边写一份工作中的相关材料,看着胡瓜在主持时不停的调侃女主持侯佩岑和周杰伦,呵,十分搞笑,郭富城凭“三岔口”拿到最佳男主角,真是有些意外,不过,那部戏里,他确实演的很好,前几天我还看他的演唱会DVD了:)
第42届台湾电影金马奖完全获奖名单
  终身成就特别奖
 葛香亭
  最佳剧情片
 《功夫》
  最佳创作短片
 《生命狂想曲》
  最佳纪录片
 《摇滚吧!男孩》
  最佳动画长片
 《红孩儿大话火焰山》
  最佳导演
 周星驰《功夫》
  最佳男演员
 郭富城(《三岔口》)
  最佳女演员
 舒淇(《最好的时光》)
  最佳男配角
 黄秋生(《头文字D》)
  最佳女配角
 元秋(《功夫》)
  最佳新演员
 周杰伦(《头文字D》)
  最佳原著剧本
 游乃海、叶天成(《龙城岁月》)
  最佳改编剧本
 冯小刚、王刚、林黎胜、张家鲁(《天下无贼》)
  最佳视觉效果
 钟志行、马永安、谭启昆、洪毓良《功夫》
  最佳美术设计
 王逸飞《人鱼朵朵》
  最佳造型设计
 陈顾方《功夫》
  最佳音效
 莫美华、罗柏禹(《龙城岁月》)
  最佳剪辑
 俅志伟(HKSE)《三岔口》
  最佳动作设计
 刘家良、董玮、熊欣欣(《七剑》)
  最佳原创电影音乐
 李欣芸(《深海》)
  最佳原创电影歌曲
 《摇滚吧,男孩》中的歌曲《阳光》 何俊明 词/曲/唱
  年度最佳台湾电影工作者
 侯孝贤
  年度最佳台湾电影
 《最好的时光》
  最佳摄影
 潘耀明(《三岔口》)
  观众票选最佳影片奖
 《面子》
第25届金鸡奖完全获奖名单
  最佳故事片
 《可可西里》《太行山上》
  最佳电视电影片
 《我们》
  最佳纪录片
 《走进毛泽东》
  最佳美术片
 《梁山伯与祝英台》
  最佳编剧
 刘恒(《张思德》)
  最佳导演
 马俪文(《我们俩》)
  导演处女作奖
 万玛才旦(《静静的嘛呢石》)
  最佳男主角
 成龙(《新警察故事》)
  最佳女主角
 金雅琴(《我们俩》)
  最佳男配角
唐国强(《张思德》)
  最佳女配角
 黄梅莹(《孔雀》)
  最佳摄影
李屏宾(《一个陌生女人的来信》)
  最佳录音
 张磊、李安磊(《太行山上》)
  最佳美术
 曹久平(《一个陌生女人的来信》)
  最佳音乐
 叶小纲(《太行山上》)
  终身成就奖
 谢晋、谢铁骊

JAVA线程.4.

| | Comments(0) | TrackBacks(0)

Interrupting a Thread: interrupt()
当要去中断一个进在运行的线程时,我们一般用这个线程对象的interrupt()方法:
public void interrupt()

public class SleepInterrupt extends Object implements Runnable {

 public void run() {
  try {
   System.out.println("in run() - about to sleep for 20 seconds");
   Thread.sleep(20000);//20秒
   System.out.println("in run() - woke up");
  } catch (InterruptedException x) {
  System.out.println("in run() - interrupted while sleeping");
  return;
  }
  System.out.println("in run() - doing stuff after nap");
  System.out.println("in run() - leaving normally");
 }

 public static void main(String[] args) {
 SleepInterrupt si = new SleepInterrupt();
 Thread t = new Thread(si);
 t.start();
 // Be sure that the new thread gets a chance to
 // run for a while.
 try {
  Thread.sleep(2000);//2秒 .如果把这里的时间设的高于前面的20秒,将是另一种结果了
 } catch (InterruptedException x) {
 }
 System.out.println("in main() - interrupting other thread");
 t.interrupt();
 System.out.println("in main() - leaving");
 }
}

运行的结果:

in run() - about to sleep for 20 seconds
in main() - interrupting other thread
in main() - leaving
in run() - interrupted while sleeping


由于线程的运行时序安排不确定性,最后两项打印的顺序可能会有所变化了。 在main()函数中我们先用start()启动了线程,线程开始调用run()要sleep20秒, 这时main()做为另一个线程要继续往下执行,会调用自身的sleep2秒,接着就去中断前面所启动的线程t,由于t的线程还在运行中,interrupt()就会改变t的线程状态,并抛出一个InterrupteException异常。
假如,我们把main()中的Thread.sleep(2000)改为Thread.sleep(30000),就是30秒,大于run()中的20秒,这时就是另一种结果了:

in run() - about to sleep for 20 seconds
in run() - woke up
in run() - doing stuff after nap
in run() - leaving normally
in main() - interrupting other thread
in main() - leaving

因为main()执行的时间太长,线程t早就执行完了,所以t正常的执行完毕,而main的t.interrupt()将不起任何作用了。
只要interrupt()是在线程的sleep运行期内执行,都会抛出InterrupteException异常。

Using isInterrupted()
我们可以通过isInterrupted()方法获得这个线程对象的中断状态:

public boolean isInterrupted()

这个方法并不改变中断状态,它只是单纯的返回true和false来告之该线程已经被中断或是未被中断。

Using Thread.interrupted()
这是一个静态方法,所以它不是为某个具体对象所引用的,它也是返回当前线程的中断状态,并且还暗中的重置这个状态为false,也就是说如果你连续两次调用这个方法,不管第一次返回的是true还是false,第二次肯定是false了。

public static boolean interrupted()

下面举个例子,假设我们需要编写一个复杂且需多运算的程序,我们希望如果在外部中断它的时候能知道在中断前这个程序的运行结果或状态,我们可以考虑在抛出InterruptedException异常的时候打印出我们需要的结果。下面是一个无穷计算的数学例子,pi = 4/1 - 4/3 + 4/5 - 4/7 + 4/9 - 4/11 + 4/13 - 4/15 ...,感觉有点类似于求圆周率,不过我们的先人在很久很久以前就在古书上给我们留下过π=180°sinθ∕θ 的优雅公式 ,嗯,我们在这里还是先讨论纯JAVA问题,纯数学问题欢迎私聊:)

public class PiInterrupt extends Object implements Runnable {
 private double latestPiEstimate;

 public void run() {
  try {
   System.out.println("for comparison, Math.PI=" + Math.PI);
   calcPi(0.000000001);
   System.out.println("within accuracy, latest pi=" + latestPiEstimate);
  } catch (InterruptedException x) {
   System.out.println("INTERRUPTED!! latest pi=" + latestPiEstimate);
   }
 }

 private void calcPi(double accuracy) throws InterruptedException {
  latestPiEstimate = 0.0;
  long iteration = 0;
  int sign = -1;
  while (Math.abs(latestPiEstimate - Math.PI) > accuracy) {
   if (Thread.interrupted()) {
   throw new InterruptedException();
   }
  iteration++;
  sign = -sign;
  latestPiEstimate += sign * 4.0 / ((2 * iteration) - 1);
  System.out.println(latestPiEstimate);
  }
 }

 public static void main(String[] args) {
  PiInterrupt pi = new PiInterrupt();
  Thread t = new Thread(pi);
  t.start();
  try {
  Thread.sleep(10000);
  t.interrupt();
  } catch (InterruptedException x) { // ignore
  }

 }

}

这个程序是看在10秒内你的机器运行的有多快,呵,可能每次的结果都不一样,大家可以好好的读读这个程序。


JAVA线程.3.

| | Comments(0) | TrackBacks(0)

只能是Runnable,而不能是extend Thread

假设你要开发一个基于图形化的一个时钟程序(ThreadCounter),你必须继承Component,因为你会用到Swing,具体的说就是要继承JComponent来画出这个图形。

http://jerryinside.blogbus.com/files/1131505668.jpg

但现在,我需要用线程来控制这个时钟的变化,我们是否也应该像前面一样,去继承一个thread呢。NO,好像不太可行,JAVA里可没有多重继承。

http://jerryinside.blogbus.com/files/1131505683.jpg

下面就是我们在实际中用的比较多的一个继承线程的方式:实现Runnable接口;其实Thread类有四个构造函数是以Runnable做为参数的:
 public Thread(Runnable target)
 public Thread(Runnable target, String name)
 public Thread(ThreadGroup group, Runnable target)
 public Thread(ThreadGroup group, Runnable target, String name)
任何一个实现Runnable接口的类都会以target传递给这些构架函数中的一个,其余的就和前面直接操作Thread一样了,实现run()方法,并通过start()去启动这个线程。这种方式是我们用的比较多的方式。

http://jerryinside.blogbus.com/files/1131505695.jpg

摘译自《Java Thread Programming(英文版)》 Paul Hyde
Sams Publishing

  欢迎各位踊跃加入呀,没有gmail的,可以留下邮箱,我给你们发邀请。
Google Groups Subscribe to 我们爱旅游
Email:
Browse Archives at groups.google.com

JAVA线程.2.

| | Comments(0) | TrackBacks(0)
public class TwoThreadGetName extends Thread {
 public void run() {
  for (int i = 0; i < 5; i++) {
   printMsg();
  }
 }

 public void printMsg() {
  Thread t = Thread.currentThread();
  String name = t.getName();
  System.out.println("name=" + name);
 }

 public static void main(String[] args) {
  TwoThreadGetName tt = new TwoThreadGetName();
  tt.setName("my worker thread");
  System.out.println("before start(), tt.isAlive()=" + tt.isAlive());  //始终打印false
  tt.start();
  System.out.println("just after start(), tt.isAlive()=" + tt.isAlive()); //始终打印true
  for (int i = 0; i < 10; i++) {
   tt.printMsg();
  }
  System.out.println("at the end of main(), tt.isAlive()=" + tt.isAlive()); //有时是false,有时是true,因为线程的运行时间不确定性
 }

}

  这段程序是一个认识线程运行状态的例子,用isAlive()方法来判断当前的线程是live还是die。在main()函数的第一个println,肯定是false,因为,此时只是定义了一个线程,但并未用start()方法去启动它。但紧跟着的一个println,肯定是true。但最后个println则不能确定,虽然已经运行到main()的结尾,但前面启动的线程可能并没有停止,所以,您在调试时,可能会每次能得到与上次不同的结果。(如果每次都一样,那恭喜您,您今天应该去买彩票了....)

  有时候我们可能并不希望线程一旦运行就马上就全部运行完,可能会希望它能在中间休息一会儿,这时,我们可以控制程序去做些其它的准备工作。假设,我们希望一个程序能在等待60秒后,再继续运行,我们会怎么做呢:

long startTime = System.currentTimeMillis();
long stopTime = startTime + 60000;
while ( System.currentTimeMillis() < stopTime ) {
// do nothing, but loop back
}

  这样是不是占用了太多的程序循环了!!!其实我们可以用thread的一个静态方法sleep()来达到这一效果:
public static native void sleep(long msToSleep) throws InterruptedException
   这个sleep可没有上面代码那样的无谓消耗:
try {
 Thread.sleep(60000);
} catch ( InterruptedException x ) {
 // ignore the exception
 }

摘译自《Java Thread Programming(英文版)》 Paul Hyde
Sams Publishing

如果令 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 分别等于百分之

   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26     

那么Hard work (努力工作):    
  H+A+R+D+W+O+R+K=8+1+18+4+23+15+18+11 = 98%    

Knowledge(知识):
 K+N+O+W+L+E+D+G+E =11+14+15+23+12+5+4+7+5 = 96%   

Love(爱情)    
  L+O+V+E12+15+22+5 = 54%   

Luck(好运)     
 L+U+C+K12+21+3+11 = 47%   

(这些我们通常认为重要的东西往往并不是最重要的)

  什么能使得生活变得圆满?    
  是Money(金钱)吗? 。。。   

 不! M+O+N+E+Y = 13+15+14+5+25 = 72%     

是Leadership(领导能力)吗? 。。。   
  不! L+E+A+D+E+R+S+H+I+P = 12+5+1+4+5+18+19+9+16 = 89%    

  那么,什么能使生活变成100%的圆满呢?    
  每个问题都有其解决之道,只要你把目光放得远一点!     

ATTITUDE(心态)    
A+T+T+I+T+U+D+E 1+20+20+9+20+21+4+5 = 100%   
我们对待工作、生活的态度能够使我们的生活达到100%的圆满!

秋声赋

| | Comments(0) | TrackBacks(0)
  北京今日浓雾满天,温度又降了些。
  晚,有友人发来诗一首,原是欧阳修的"秋声赋"。下周就要冬至了,今夜读读古人的秋声赋,感受一下古人的听秋之意吧:

  欧阳子方夜读书,闻有声自西南来者,悚然而听之,曰:异哉!初淅沥以萧飒,忽奔腾而砰湃,如波涛夜惊,风雨骤至。其触于物也,铮铮,金铁皆鸣;又如赴敌之兵,衔枚疾走,不闻号令,但闻人马之行声。余谓童子:“此何声也?汝出视之。”童子曰:“星月皎洁,明河在天,四无人声,声在树间。”
   余曰:“噫嘻悲哉!此秋声也,胡为而来哉?盖夫秋之为状也:其色惨淡,烟霏云敛;其容清明,天高日晶;其气慄冽,砭人肌骨;其意萧条,山川寂寥。故其为声也,凄凄切切,呼号愤发。丰草绿缛而争茂,佳木葱茏而可悦;草拂之而色变,木遭之而叶脱;其所以摧败零落者,乃其一气之余烈。夫秋,刑官也,于时为阴;又兵象也,于行用金;是谓天地之义气,常以肃杀而为心。天之于物,春生秋实。故其在乐也,商声主西方之音;夷则为七月之律。商,伤也,物既老而悲伤;夷,戮也,物过盛而当杀。嗟乎!草木无情,有时飘零。人为动物,惟物之灵,百忧感其心,万事劳其形,有动于中,必摇其精。而况思其力之所不及,忧其智之所不能,宜其渥然丹者为槁木,黟然黑者为星星。奈何以非金石之质,欲与草木而争荣?念谁为之戕贼,亦何恨乎秋声!”
   童子莫对,垂头而睡。但闻四壁虫声唧唧,如助余之叹息。

Math Methods

Method

Description

double abs(double a)

Returns the absolute value of a double value.

float abs(float a)

Returns the absolute value of a float value.

int abs(int a)

Returns the absolute value of an int value.

long abs(long a)

Returns the absolute value of a long value.

double acos(double a)

Returns the arc cosine of an angle, in the range of 0.0 through pi.

double asin(double a)

Returns the arc sine of an angle, in the range of –pi/2 through pi/2.

double atan(double a)

Returns the arc tangent of an angle, in the range of –pi/2 through pi/2.

double atan2(double a, double b)

Converts rectangular coordinates (b, a) to polar (r, theta).

double ceil(double a)

Returns the smallest (closest to negative infinity) double value that is not less than the argument and is equal to a mathematical integer.

double cos(double a)

Returns the trigonometric cosine of an angle.

double exp(double a)

Returns the exponential number e (that is, 2.718…) raised to the power of a double value.

double floor(double a)

Returns the largest (closest to positive infinity) double value that is not greater than the argument and is equal to a mathematical integer.

double IEEEremainder(double f1, double f2)

Computes the remainder operation on two arguments as prescribed by the IEEE 754 standard.

double log(double a)

Returns the natural logarithm (base e) of a double value.

double max(double a, double b)

Returns the greater of two double values.

float max(float a, float b)

Returns the greater of two float values.

int max(int a, int b)

Returns the greater of two int values.

long max(long a, long b)

Returns the greater of two long values.

double min(double a, double b)

Returns the smaller of two double values.

float min(float a, float b)

Returns the smaller of two float values.

int min(int a, int b)

Returns the smaller of two int values.

long min(long a, long b)

Returns the smaller of two long values.

double pow(double a, double b)

Returns of value of the first argument raised to the power of the second argument.

double random()

Returns a double value with a positive sign, greater than or equal to 0.0 and less than 1.0.

double rint(double a)

Returns the double value that is closest in value to a and is equal to a mathematical integer.

long round(double a)

Returns the closest long to the argument.

int round(float a)

Returns the closest int to the argument.

double sin(double a)

Returns the trigonometric sine of an angle.

double sqrt(double a)

Returns the correctly rounded positive square root of a double value.

double tan(double a)

Returns the trigonometric tangent of an angle.

double toDegrees(double angrad)

Converts an angle measured in radians to the equivalent angle measured in degrees.

double toRadians(double angdeg)

Converts an angle measured in degrees to the equivalent angle measured in radians.

All these methods are static , so you do not need to create an instance of the Math class to use them

十一月的萧邦

| | Comments(0) | TrackBacks(0)

  还记得去年夏末秋初的七里香吗?
  今年,晚秋冬至,周杰伦的新专辑"十一月的萧邦"终于面市了。
  没有太多的惊喜,如果说“七里香”打85分,这张萧邦可以打75分,熟悉的曲风和那听不清的唱词,当然,还有方文山那隽秀的写词。但整张专辑本没有让人耳朵一亮的感觉了,但仍不失是一张好听的音乐。
  除了其主打的"夜曲",我最喜欢的就是"麦芽糖"这首歌了,方文山的词写的好,周董的曲也写的好:
 

   这蜿蜒的微笑拥抱山丘 溪流跟风唱起歌
   我像田园诗人般解读眼前的生活
   麦田弯腰低头在垂钓温柔这整座山谷都是风笛手
   我在哑口聆听传说跟着童话故事走
   远方的风车 远距离诉说 那幸福在深秋 满满的被收割
   老仓库的角落 我们数着 一麻袋的爱跟快乐 初恋的颜色
   我牵着你的手经过 种麦芽糖的山坡
   香浓的诱惑 你脸颊微热 吐气在我的耳朵
   摘下麦芽糖熟透 我醒来还笑着
   开心的 被黏手 我满嘴 都是糖果
   牵着你的手经过 种麦芽糖的山坡
   甜蜜的四周 我低头害羞 我们愉快的梦游
   我在草地上喝着 麦芽糖酿的酒
   鲜嫩的 小时候 我好想 再咬一口
   <泰语>我爱你~
   我满嘴 都是糖果 我好想 再咬一口

  “发如雪”是不是听起来能让人联想起“东风破”呢。 http://www.yesya.com/cd/HT2/JayChow/Jay14/Jay14.jpg曲目:
01.夜曲
02.蓝色风暴(百事可乐广告歌)
03.发如雪
04.黑色毛衣
05.四面楚歌
06.枫
07.浪漫手机
08.逆鱗
09.麦芽糖
10.珊瑚海(与南拳妈妈Lara合唱)
11.飘移(电影《头文字D》插曲)
12.一路向北(电影《头文字D》主题曲)

JAVA线程.1.

| | Comments(0) | TrackBacks(0)
当操作系统开始运行一个程序时,就会创建一个进程(process)。一个进程就是一个正在执行的程序(注意,是正在执行的,如果没有执行,那只是一段占用了硬盘空间的文件)。每个进程至少包含着一个正在运行的线程(thread)。有的人也把线程称之为轻量级的进程。一个线程就是程序中正在执行的一段代码,每个线程都有自己的变量,堆栈,生命周期。现在的操作系统允许在一个进程里运行多个线程。当操作系统启动JVM时,实际上也就是启动了一个进程,当然这个进程也开始在创建大量的线程了。

我们以在java下编写了一个带main()函数的类并执行时来做为例子。当在jvm下执行这个小程序时,jvm就创建了一个"main"线程以执行main()里的代码,直到main()执行完毕,这个线程也就die了。同时有另一个线程一直在JVM中执行着,那就是垃圾收回线程,这就是最简单的JVM中两个线程同时并行的例子。

如果你的程序是基于图形用户接口(GUI)的,JVM还会创建更多的线程。一个线程会负责GUI的事件处理,另一个线程则负责绘图了。

下面介绍一下在java中创建线程的方法了,一般有两种,There are two ways to create a new class that can have a thread running within it. One way is to extend the Thread class. The other is to extend any class and implement the Runnable interface.这两种方法各有各的好处吧,因为java中没有多重继承,所以在需要继承某个类的属性方法的同时又要其是个线程,这时用实现Runnable接口时就非常合理了,如果没有这种需求,我们一般使用最简单的方式:

1 Extend the java.lang.Thread class.
2 Override the run() method in this subclass of Thread.
3 Create an instance of this new class.
4 Invoke the start() method on the instance.

http://jerryinside.blogbus.com/files/1130910333.jpg

1: public class TwoThread extends Thread {
2:  public void run() {
3:   for ( int i = 0; i < 10; i++ ) {
4:    System.out.println(“New thread”);
5:   }
6:  }
7:
8:  public static void main(String[] args) {
9:   TwoThread tt = new TwoThread();
10:  tt.start();
11:
12:  for ( int i = 0; i < 10; i++ ) {
13:   System.out.println(“Main thread”);
14:   }
15:  }
16: }

上面这段程序每次运行所得的结果会不一样的.

摘译自《Java Thread Programming(英文版)》 Paul Hyde
Sams Publishing

最近的留言

John发表于2008北京车展: 你是要看车,还是看美
bannoorse发表于2008北京车展: 太好看了啊啊啊 希
易风行发表于宇宙大爆炸(四):宇宙的模样: 这片子真的不错,很值
John发表于宇宙大爆炸(四):宇宙的模样: 自此为止,《宇宙大爆
星迷发表于周星驰的下一个梦想是什么?: 人因梦想而伟大
John发表于数据恢复中....: 呵,谢谢了,已发过的
风南发表于数据恢复中....: 我rss里还有一些片
风南发表于数据恢复中....: 唉。早知道我把那几篇