It is possible to call a flow from APEX class since Summer’14 release with the help of Flow.Interview class. Here is an example below.

Map params = new Map();
params.put(‘RatecardId’, ratecard.Id);//Passing RateCard Id to the flow as a parameter
params.put(‘OptyId’, Optyid);//Passing Opportunity Id to the flow as a parameter
Flow.Interview.Update_RateCard_after_Opty_Creation RFlow = new Flow.Interview.Update_RateCard_after_Opty_Creation(params);//Calling the flow “Update_RateCard_after_Opty_Creation” which is active in Salesforce.
RFlow.start(); //Start method invokes an autolaunched or user provisioning flow

There is an useful article which Andrew has written on the same topic and here is the link