一路追梦想

热爱技术,更热爱生活


  • 首页

  • 关于

  • 标签

  • 归档

Java中创建线程到两种方法

发表于 2013-03-31 | 分类于 Java

首先,按照线程的模型,一个具体的线程也是由虚拟的cpu、代码与数据组成,其中代码与数据构成了线程体,线程体决定了线程到行为。虚拟的cpu是在创建线程时由系统自动封装进Thread类到实例中,而线程体要应用程序通过一个对象传递给Thread类的构造函数。Java中到线程体是由线程类的run()方法定义,在该方法中定义线程的具体行为。线程开始执行时,也是从它的run()方法开始执行。
下面看一下Thread类的构造方法。

1
public Thread(ThreadGroup group,Runnable target,String name);

其中group是指明该线程所属的线程组;target提供线程体的对象。java.lang.Runnable接口中定义了run()方法。实现该接口的类的对象可以提供线程体,线程启动时该对象的run()方法将被调用;name线程名称。

言归正传,线程创建中,线程体的构造是关键。任何实现Runnable接口的对象都可以作为Thread类构造方法中的target参数,而Thread类本身也实现了Runnable接口,因此可以有两种方式提供run方法的实现:实现Runnable接口和继承Thread类。

通过实现Runnable接口创建线程

在java.lang中Runnable接口的定义为:

1
2
3
public interface Runnable{
void run();
}

使用这种方法创建线程的步骤是:
1.定义一个线程类实现Runnable接口,即在该类中提供run()方法的实现。
2.把Runnable的一个实例作为参数传递给Thread类的一个构造方法,该实例对象提供线程体run().
下面给一个简单的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class ThreadTest {
public static void main(String args[]){
Thread t1 = new Thread( new Hello());
Thread t2 = new Thread(new Hello());
t1.start();
t2.start();
}
}

class Hello implements Runnable{
int i;
public void run(){
while(true){
System.out.println("Hello "+i++);
if(i == 5)
break;
}
}
}

阅读全文 »

Ubuntu Gnome桌面环境下截屏命令

发表于 2012-12-29 | 分类于 Linux

今天在ubuntu下截屏的时候才发现截屏的命令又忘了,索性就把这些命令记到博客里吧,以后用的时候也不用到处搜,到处找了,这个截屏命令还是很方面的,感觉很酷,这个是gnome环境下的截屏命令,也就是Ubuntu默认的桌面环境下的截屏命令,如果你安装了其他桌面环境比如gtk、xface之类的下面的内容就对你不适合了

1
2
3
4
gnome-screenshot -a
//是局部截图,自己选择区域
gnome-screenshot -w
//全屏截图,相当于快捷键print screen。

下面是常用的截屏命令。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
gnome-screenshot

gnome-screenshot -help
Usage: gnome-screenshot [OPTION...] Take a picture of the screen
Help Options:
-h, --help                    Show help options
--help-all                    Show all help options
--help-gtk                    Show GTK+ Options

Application Options:
-w, --window                  Grab a window instead of the entire screen
-a, --area                    Grab an area of the screen instead of the entire screen
-b, --include-border          Include the window border with the screenshot
-B, --remove-border            Remove the window border from the screenshot
-d, --delay=seconds            Take screenshot after specified delay [in seconds]
-e, --border-effect=effect    Effect to add to the border (shadow, border or none)
-i, --interactive              Interactively set options
--display=DISPLAY              X display to use

关于动态内存传递的一些知识

发表于 2012-10-15 | 分类于 C

动态内存传递一直都是一个难点,稍不留神就会掉到陷阱中去,最近正好学到动态内存传递的知识,就记下来了。首先看看下面的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<iostream>
#include<cstring>
#include<malloc.h>

using namespace std;

void GetMemory(char *p,int num)
{
p = (char *)malloc(sizeof(char)*num);
};

int main(void)
{
char *str = NULL;
GetMemory(str,100);
strcpy(str,"hello");
return 0;
}

阅读全文 »

泛型编程中的remove方法

发表于 2012-09-13 | 分类于 C

最近看模板类的时候,用到了泛型编程中的remove方法,搜索了一下,自己折腾了一番,总算搞清楚了remove方法,写下来和大家一起分享,同时也可以增加一下记忆

关于泛型编程中的remove方法,官方给的模版类定义如下:

1
2
template < class ForwardIterator, class T >
ForwardIterator remove ( ForwardIterator first, ForwardIterator last,const T& value );

说简单点就是remove接受三个参数,前两个迭代器或者指针表示一个范围,最后一个数,代表要从前面的范围中“移除”的值,这个方法不难理解,看一段代码:

阅读全文 »

C++中关于fstream和sstream的困惑

发表于 2012-08-08 | 分类于 C

看C++ premier的时候遇到一个习题,不是很懂,最后经过查询资料似乎明白了,写下来留着以后不懂的时候再看看
先上代码吧:

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
//8-16.cpp
//将文件中的每一行存储在vector容器对象中
//然后使用istringstream
//从vector里以每次读一个单词的形式读取所存储的行
#include
#include
#include
#include
#include
using namespace std;

int fileToVector(string fileName, vector& svec)
{
//创建ifstream对象inFile并绑定到由形参fileName指定的文件
ifstream inFile(fileName.c_str());
if (!inFile) //打开文件失败
return 1;
//将文件内容读入到string类型的vector容器
//每一行存储为该容器对象的一个元素
string s;
while (getline(inFile, s))
svec.push_back(s);
inFile.close();//关闭文件
if (inFile.eof())//遇到文件结束符
return 4;
if (inFile.bad())//发生系统级故障
return 2;
if (inFile.fail())//读入数据失败
return 3;
}
int main( void )
{
vector svec;
string fileName, s;

//读入文件名
cout << "Enter filename :" << endl;
cin >> fileName;

//处理文件
switch (fileToVector(fileName, svec))
{
case 1:
cout << "error: can not to open file: "<< fileName << endl;
return -1;
case 2:
cout << "error: system failure " << endl;
return -1;
case 3:
cout << "error: read failure " << endl;
return -1;
}

//使用istringstream从vector里每次读一个单词的形式读取所存储的行
string word;
istringstream isstream;
for (vector::iterator iter = svec.begin();iter != svec.end(); ++iter)
{
//将vector对象的当前元素复制给istringstream对象
isstream.str(*iter);
//从istringstream对象中读取单词并输出
while (isstream >> word)
{
cout << word << endl;
}
isstream.clear();//将istringstream流设置为有效状态
}
system("pause");
return 0;
}

阅读全文 »
1…67
picksomething

picksomething

专注Android,Java,RN,Python

65 日志
17 分类
148 标签
RSS
© 2018 PICKSOMETHING
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.4